mirror of
https://github.com/processone/ejabberd
synced 2025-10-03 09:49:18 +02:00
Compare commits
1341 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
060992bafa | ||
![]() |
c0c69394b9 | ||
![]() |
2b7285e0b2 | ||
![]() |
c3a24ffdf8 | ||
![]() |
48fb446f8c | ||
![]() |
0283a501fa | ||
![]() |
fb572bf901 | ||
![]() |
7eb09295a3 | ||
![]() |
e0eae52eae | ||
![]() |
dd270f99fc | ||
![]() |
1472caab50 | ||
![]() |
ef2e62a01c | ||
![]() |
4e909fc50d | ||
![]() |
19b7106124 | ||
![]() |
4dea2f1eb6 | ||
![]() |
1d5b9bba15 | ||
![]() |
2951281115 | ||
![]() |
fd8aba6d41 | ||
![]() |
066e0a8101 | ||
![]() |
bf262a6051 | ||
![]() |
7840924b17 | ||
![]() |
60bdab4e52 | ||
![]() |
3a36a722c5 | ||
![]() |
00c75c3dc9 | ||
![]() |
cae7850a70 | ||
![]() |
ce668bef14 | ||
![]() |
3887b6d930 | ||
![]() |
b7bd0e196d | ||
![]() |
6d63842ad3 | ||
![]() |
2f3b9015e9 | ||
![]() |
6ae48eb991 | ||
![]() |
c508795ad4 | ||
![]() |
4a053807e0 | ||
![]() |
dd5bbda2dc | ||
![]() |
98469678a0 | ||
![]() |
b8550e087e | ||
![]() |
644d468b4f | ||
![]() |
74c810eeaa | ||
![]() |
a46325166a | ||
![]() |
654d4b81b1 | ||
![]() |
ff3d33dde4 | ||
![]() |
3183e2f733 | ||
![]() |
e1dc686ae7 | ||
![]() |
38b203feb1 | ||
![]() |
8b61cf0742 | ||
![]() |
a02c75aa08 | ||
![]() |
51af393baa | ||
![]() |
41318e45a5 | ||
![]() |
a94f227103 | ||
![]() |
517776acd4 | ||
![]() |
212a5ded6e | ||
![]() |
fd9c929e37 | ||
![]() |
ce828163af | ||
![]() |
97e1b419a0 | ||
![]() |
d70ac7f7c5 | ||
![]() |
7065cb69f1 | ||
![]() |
7815463ba0 | ||
![]() |
48e6631751 | ||
![]() |
903e6b70b4 | ||
![]() |
5edba59b24 | ||
![]() |
31cb4b06e4 | ||
![]() |
10f6723f00 | ||
![]() |
f594620c68 | ||
![]() |
dacfad61d8 | ||
![]() |
7c1da7e0cf | ||
![]() |
e709f99b47 | ||
![]() |
f150419891 | ||
![]() |
053fd26994 | ||
![]() |
bba1a1e3ca | ||
![]() |
e5da1efea4 | ||
![]() |
fbfd41c16e | ||
![]() |
4391921727 | ||
![]() |
4cd3c657e2 | ||
![]() |
7647b77225 | ||
![]() |
fe8710fe00 | ||
![]() |
1a9b147baf | ||
![]() |
6214e0385d | ||
![]() |
f7002c31f0 | ||
![]() |
99b75396ad | ||
![]() |
b1c3baa7bd | ||
![]() |
355eb5dfde | ||
![]() |
d269e32c3a | ||
![]() |
214b76f763 | ||
![]() |
73a8fbdfb5 | ||
![]() |
9b6f0aeb3c | ||
![]() |
45a6aed57f | ||
![]() |
9d17a160b6 | ||
![]() |
850d097660 | ||
![]() |
8ce8f67c06 | ||
![]() |
a17c2c166d | ||
![]() |
a64aa9e280 | ||
![]() |
3834a47a39 | ||
![]() |
9f6ff515ff | ||
![]() |
64a210842e | ||
![]() |
c0de52c967 | ||
![]() |
67c3df05b3 | ||
![]() |
4a66616756 | ||
![]() |
e4d424bf56 | ||
![]() |
c0fc6091b1 | ||
![]() |
ef35d19ff1 | ||
![]() |
cfa787c4b6 | ||
![]() |
611ebce0d2 | ||
![]() |
1e0b8cb547 | ||
![]() |
99d323b1dd | ||
![]() |
72bc9b6c7f | ||
![]() |
4694a482f4 | ||
![]() |
443f39bfdb | ||
![]() |
b118dd8fc6 | ||
![]() |
bf39da7b8b | ||
![]() |
ad3eee059e | ||
![]() |
e94ccabcf0 | ||
![]() |
427a29c74e | ||
![]() |
1d79edbae0 | ||
![]() |
9e4a6d09df | ||
![]() |
7b08289799 | ||
![]() |
bc937546ec | ||
![]() |
3b972fe4a3 | ||
![]() |
5e93725044 | ||
![]() |
500af47b79 | ||
![]() |
d862e04186 | ||
![]() |
5f293cb1e0 | ||
![]() |
c93ea2c22f | ||
![]() |
c567005241 | ||
![]() |
a6823d157c | ||
![]() |
bf54cc59e1 | ||
![]() |
740b0c7dd7 | ||
![]() |
c3f5083f15 | ||
![]() |
b65c11daf6 | ||
![]() |
263e1f59f7 | ||
![]() |
3d89c9199c | ||
![]() |
4a51bf90ab | ||
![]() |
a77c7e36b0 | ||
![]() |
88ae3fddf3 | ||
![]() |
bddcf0624e | ||
![]() |
6b47d3eb0d | ||
![]() |
a0c97b33e0 | ||
![]() |
5def9cef9f | ||
![]() |
c20d745028 | ||
![]() |
e099435cd6 | ||
![]() |
d6a00f5151 | ||
![]() |
653413e912 | ||
![]() |
288eecc23d | ||
![]() |
b55b6f3d26 | ||
![]() |
d00561b58c | ||
![]() |
432810db89 | ||
![]() |
f3b1b5d419 | ||
![]() |
d9a7b67f0e | ||
![]() |
85f05192c8 | ||
![]() |
149b715b4f | ||
![]() |
bae345b92b | ||
![]() |
10ec128b94 | ||
![]() |
7a6e409879 | ||
![]() |
ea19e4bc7f | ||
![]() |
6122a525d2 | ||
![]() |
b607d95a93 | ||
![]() |
ee46333def | ||
![]() |
34b40aec66 | ||
![]() |
639147be41 | ||
![]() |
c48aa38c39 | ||
![]() |
70bec7b714 | ||
![]() |
a7c15eaccf | ||
![]() |
c78e99dd54 | ||
![]() |
3196779308 | ||
![]() |
064b005ec5 | ||
![]() |
2d2b98e525 | ||
![]() |
71f623ddbf | ||
![]() |
f03b5f4c44 | ||
![]() |
aff8b47b6c | ||
![]() |
6c1452435d | ||
![]() |
38f365ffeb | ||
![]() |
ed846c4a88 | ||
![]() |
8855a304cc | ||
![]() |
95a083a6f4 | ||
![]() |
0bb99bb371 | ||
![]() |
38cc3ccb1e | ||
![]() |
c51b044b3f | ||
![]() |
363351b18c | ||
![]() |
167bbc768a | ||
![]() |
591e15f0f6 | ||
![]() |
b4a917db09 | ||
![]() |
7755fcc846 | ||
![]() |
250af8f06a | ||
![]() |
9569e407b5 | ||
![]() |
573d5525ec | ||
![]() |
f1de7b008b | ||
![]() |
c10e6ded78 | ||
![]() |
9bc991cb7d | ||
![]() |
ffa7c32d80 | ||
![]() |
038491d2ec | ||
![]() |
9d1d57cd82 | ||
![]() |
c38b2bfc21 | ||
![]() |
18e7805ef5 | ||
![]() |
010eab6e30 | ||
![]() |
30c8088d73 | ||
![]() |
354009033a | ||
![]() |
bf3f904fe9 | ||
![]() |
d65cafae64 | ||
![]() |
128103b7b2 | ||
![]() |
cbb88638d2 | ||
![]() |
f046aeeaa2 | ||
![]() |
bd5f9537c5 | ||
![]() |
838bbd70ef | ||
![]() |
e7997244af | ||
![]() |
3874e71971 | ||
![]() |
67cc0c5286 | ||
![]() |
826123db56 | ||
![]() |
05b0037462 | ||
![]() |
54796f888e | ||
![]() |
82ec0a4837 | ||
![]() |
7167df7979 | ||
![]() |
45e7d8426d | ||
![]() |
ef754939c4 | ||
![]() |
ee3a0b8b1a | ||
![]() |
2182cb60ae | ||
![]() |
4da8278e66 | ||
![]() |
629db496b5 | ||
![]() |
f79b8e166a | ||
![]() |
fae4ab97fd | ||
![]() |
da8d04a654 | ||
![]() |
ce02fc485f | ||
![]() |
69695ffe27 | ||
![]() |
6fdb467484 | ||
![]() |
d8016a6477 | ||
![]() |
e43d864184 | ||
![]() |
4d3681aba1 | ||
![]() |
d791f6ceaa | ||
![]() |
602a42f5ce | ||
![]() |
c98739d5b5 | ||
![]() |
425504454c | ||
![]() |
780031847c | ||
![]() |
c3af613db1 | ||
![]() |
babd01a87f | ||
![]() |
17b605a32b | ||
![]() |
fc813acd7b | ||
![]() |
d842d6772d | ||
![]() |
67aaf93157 | ||
![]() |
9154275431 | ||
![]() |
c343ef7aad | ||
![]() |
78093735b7 | ||
![]() |
ed6a111982 | ||
![]() |
a8a5be7a34 | ||
![]() |
5008947e32 | ||
![]() |
0827a5116f | ||
![]() |
85d0e93af5 | ||
![]() |
f677436437 | ||
![]() |
05f8992e3e | ||
![]() |
2ed7ce49a2 | ||
![]() |
9087867631 | ||
![]() |
f58a0cdbfd | ||
![]() |
91fb02d62e | ||
![]() |
d831fd4789 | ||
![]() |
322e642f19 | ||
![]() |
4967acaec9 | ||
![]() |
113e5a322e | ||
![]() |
9c29457ee2 | ||
![]() |
4fe5ee034c | ||
![]() |
78650f827e | ||
![]() |
a4fc448a52 | ||
![]() |
01a71dc189 | ||
![]() |
90a200be25 | ||
![]() |
9c92fcc92d | ||
![]() |
6f9f4b3635 | ||
![]() |
968fbc9424 | ||
![]() |
7862c6a7db | ||
![]() |
ced72f4a89 | ||
![]() |
85dbadee5c | ||
![]() |
cf13abdab6 | ||
![]() |
239d4a5bfb | ||
![]() |
51e96433ea | ||
![]() |
12274a969a | ||
![]() |
79a4dd4a26 | ||
![]() |
d9e86600dc | ||
![]() |
b8cb1bbdcf | ||
![]() |
c180349fc6 | ||
![]() |
a6fec278c3 | ||
![]() |
999ede59ce | ||
![]() |
30a7b0ef3b | ||
![]() |
16af90648e | ||
![]() |
7723951c05 | ||
![]() |
1668cde93f | ||
![]() |
418ca34c85 | ||
![]() |
6d8e588b78 | ||
![]() |
9bf2d6ce5b | ||
![]() |
496daf9220 | ||
![]() |
573e06cc0c | ||
![]() |
6d77ace5c9 | ||
![]() |
aa78362c7f | ||
![]() |
6151674e64 | ||
![]() |
1ea0dde417 | ||
![]() |
53dea7b6d7 | ||
![]() |
c87ba45a86 | ||
![]() |
6ea25e2272 | ||
![]() |
888c335c2e | ||
![]() |
4dcf97c4c1 | ||
![]() |
352ee3a318 | ||
![]() |
c8abff33c1 | ||
![]() |
998690f58c | ||
![]() |
6e68c2ec02 | ||
![]() |
896b7c7559 | ||
![]() |
69b190775c | ||
![]() |
b769de0690 | ||
![]() |
19482529ee | ||
![]() |
ad8e325139 | ||
![]() |
b901a69f5c | ||
![]() |
62a165e4cf | ||
![]() |
29616dc163 | ||
![]() |
60324d4b7a | ||
![]() |
cfa6575b4f | ||
![]() |
3b01e4e4e0 | ||
![]() |
fa4a93c465 | ||
![]() |
74d6d53ac6 | ||
![]() |
8070a656fe | ||
![]() |
105a0c2029 | ||
![]() |
e887546c27 | ||
![]() |
9305232f8c | ||
![]() |
7832a6342a | ||
![]() |
c924a47188 | ||
![]() |
1d42d55064 | ||
![]() |
dd7550dbad | ||
![]() |
7df7daa050 | ||
![]() |
090a7e664e | ||
![]() |
3d49bed0cf | ||
![]() |
9f28098d04 | ||
![]() |
e761b22c61 | ||
![]() |
4d62f545c5 | ||
![]() |
f789495c39 | ||
![]() |
46a64c0f68 | ||
![]() |
ab8a39e71f | ||
![]() |
630301a7ba | ||
![]() |
d4fd987e84 | ||
![]() |
c5abe5d882 | ||
![]() |
71dbbc1b5a | ||
![]() |
c9a9585573 | ||
![]() |
bb2f398fa2 | ||
![]() |
afc54aeb20 | ||
![]() |
9c142e5509 | ||
![]() |
27f98f50d3 | ||
![]() |
0145594adc | ||
![]() |
67ee0de7e3 | ||
![]() |
087718c47a | ||
![]() |
6bf5930703 | ||
![]() |
90c4fa2a84 | ||
![]() |
b75c3257bd | ||
![]() |
178b09f5bb | ||
![]() |
70980efe39 | ||
![]() |
c124dbdd6a | ||
![]() |
6af2a65e53 | ||
![]() |
54f89e7568 | ||
![]() |
66205cf648 | ||
![]() |
b38d8618b2 | ||
![]() |
051093f4f8 | ||
![]() |
2a85c0a474 | ||
![]() |
7018b8b164 | ||
![]() |
41232ccb39 | ||
![]() |
6bd4399aee | ||
![]() |
45dafbcdcc | ||
![]() |
a32bfd1215 | ||
![]() |
78f7a9a244 | ||
![]() |
44782001e2 | ||
![]() |
c7d7d07ee4 | ||
![]() |
27390c387d | ||
![]() |
ceee3d3be1 | ||
![]() |
983c016bba | ||
![]() |
8a7e955453 | ||
![]() |
376f7b261e | ||
![]() |
80423d7e69 | ||
![]() |
da61f3dfea | ||
![]() |
a49ec4d583 | ||
![]() |
5f849bdb3f | ||
![]() |
d875e0280c | ||
![]() |
4188c062e7 | ||
![]() |
21ae72d02e | ||
![]() |
d834a9c1c1 | ||
![]() |
07b102bb80 | ||
![]() |
480e2442ee | ||
![]() |
a9c7bf97ef | ||
![]() |
cae40c3f72 | ||
![]() |
4f90d1a0d9 | ||
![]() |
22b3d0e49f | ||
![]() |
0732603a4e | ||
![]() |
e34b6f4204 | ||
![]() |
64142de4fe | ||
![]() |
a4062f6ac0 | ||
![]() |
76baf58d5d | ||
![]() |
e134d7f0b4 | ||
![]() |
20a0051578 | ||
![]() |
eca3204e82 | ||
![]() |
a19ab9f4e3 | ||
![]() |
133d52d040 | ||
![]() |
20a77cb9c7 | ||
![]() |
cab96d2156 | ||
![]() |
9be76cce9e | ||
![]() |
e7035f3235 | ||
![]() |
6e4ac0c501 | ||
![]() |
aa612463cc | ||
![]() |
9827ad43e4 | ||
![]() |
e0bb900651 | ||
![]() |
ad1b577ca9 | ||
![]() |
f72cfa9a13 | ||
![]() |
056635119c | ||
![]() |
2e754a5557 | ||
![]() |
6959447c2c | ||
![]() |
4a363b6e76 | ||
![]() |
862cacabcb | ||
![]() |
29e6204bde | ||
![]() |
bc6c868c8a | ||
![]() |
9d87193d80 | ||
![]() |
85b660fb4b | ||
![]() |
5a6e46c32a | ||
![]() |
457d8fc6cc | ||
![]() |
8ebbb45a19 | ||
![]() |
13dae75d01 | ||
![]() |
172847bc76 | ||
![]() |
2b2551bc50 | ||
![]() |
aa8957f137 | ||
![]() |
ba9a7916db | ||
![]() |
5945dba412 | ||
![]() |
7d5413ce95 | ||
![]() |
364ee0f8ed | ||
![]() |
213a513f54 | ||
![]() |
aa65e626f4 | ||
![]() |
5b3b29565c | ||
![]() |
f38f81159d | ||
![]() |
7511307868 | ||
![]() |
1cadc6b1dc | ||
![]() |
405437b086 | ||
![]() |
51f4382b9f | ||
![]() |
e967a409d3 | ||
![]() |
eaebfc795e | ||
![]() |
3bc66a7054 | ||
![]() |
8cfcc69100 | ||
![]() |
ce3bc85d32 | ||
![]() |
1fe9e3aa67 | ||
![]() |
d93a8e341f | ||
![]() |
1107cefdb6 | ||
![]() |
92b2bb7532 | ||
![]() |
9a2a9187cd | ||
![]() |
50b57ada7c | ||
![]() |
a8649767f2 | ||
![]() |
2eb605873c | ||
![]() |
26e8679359 | ||
![]() |
2aa673e780 | ||
![]() |
06303ae7ab | ||
![]() |
2b3d588f10 | ||
![]() |
3dd7febb98 | ||
![]() |
beb5bfea36 | ||
![]() |
628f286eb6 | ||
![]() |
9e14c7a803 | ||
![]() |
863f2e019c | ||
![]() |
4334ce9c29 | ||
![]() |
7008e49675 | ||
![]() |
b84596be57 | ||
![]() |
4fd26306fe | ||
![]() |
8e9ea2d98c | ||
![]() |
1024cbe5b3 | ||
![]() |
a16ef68a49 | ||
![]() |
7726904f79 | ||
![]() |
1481734f47 | ||
![]() |
01955b867d | ||
![]() |
549a2b0790 | ||
![]() |
2caaa09c99 | ||
![]() |
da06a50072 | ||
![]() |
2b02af13ba | ||
![]() |
ae238bc984 | ||
![]() |
3d2036db61 | ||
![]() |
b8360cae08 | ||
![]() |
790cb104cd | ||
![]() |
f3c935d2e1 | ||
![]() |
e589265921 | ||
![]() |
eb6f242d99 | ||
![]() |
ce6d5aa6a0 | ||
![]() |
f269d5b613 | ||
![]() |
a84c492130 | ||
![]() |
3ae636b454 | ||
![]() |
06e3f9f0a4 | ||
![]() |
1669303a40 | ||
![]() |
39e37b6175 | ||
![]() |
c72ba1f188 | ||
![]() |
4d625e5574 | ||
![]() |
803f95050f | ||
![]() |
c021cf34be | ||
![]() |
7fce7d1049 | ||
![]() |
bd36895afe | ||
![]() |
b90c48f837 | ||
![]() |
344775aa8e | ||
![]() |
7d0c20e133 | ||
![]() |
ab5a2e8d10 | ||
![]() |
e34c1ebcba | ||
![]() |
73dbc01c2e | ||
![]() |
f0773c4ab8 | ||
![]() |
cc5c9f6008 | ||
![]() |
da9c591eed | ||
![]() |
6790ab01e8 | ||
![]() |
f9cecca362 | ||
![]() |
f4009939a6 | ||
![]() |
17b5b34e3c | ||
![]() |
c291c20a3b | ||
![]() |
22e7ce37d4 | ||
![]() |
2137602a6a | ||
![]() |
c7b29b5a9a | ||
![]() |
715b5b64c6 | ||
![]() |
c20ed8c7b3 | ||
![]() |
d3baacd78e | ||
![]() |
07e20784cb | ||
![]() |
9eb8bb6c40 | ||
![]() |
e10c0f3120 | ||
![]() |
6f7efebb56 | ||
![]() |
a657778065 | ||
![]() |
3650d94bb5 | ||
![]() |
6a428f3d02 | ||
![]() |
abe1d96c58 | ||
![]() |
29a59cfe48 | ||
![]() |
18c54f4e9e | ||
![]() |
c7d967a2b5 | ||
![]() |
b50ea7ef1f | ||
![]() |
4843cd432f | ||
![]() |
d56eae809d | ||
![]() |
af97211ecc | ||
![]() |
601fcba4cb | ||
![]() |
cc3a9f7722 | ||
![]() |
296ef8287f | ||
![]() |
b5dab24679 | ||
![]() |
319414b985 | ||
![]() |
6b0058c89c | ||
![]() |
855c828d1f | ||
![]() |
c72ef537ee | ||
![]() |
11e86811a0 | ||
![]() |
2183f60917 | ||
![]() |
05f0fbf195 | ||
![]() |
853da159de | ||
![]() |
643ae7e5f9 | ||
![]() |
322e25d18e | ||
![]() |
bdd8ba115e | ||
![]() |
71ad7c368d | ||
![]() |
8be0f8a0b0 | ||
![]() |
e9e678a994 | ||
![]() |
a89152a3d7 | ||
![]() |
73f5d950e5 | ||
![]() |
46d5ab369f | ||
![]() |
81906b74ed | ||
![]() |
74b0f64645 | ||
![]() |
50948d1619 | ||
![]() |
38f1132192 | ||
![]() |
50ef49d190 | ||
![]() |
3669ac8aed | ||
![]() |
7f8519c0af | ||
![]() |
859ba3e0c2 | ||
![]() |
94c2a115d5 | ||
![]() |
634b646711 | ||
![]() |
2a9dc2c7b2 | ||
![]() |
ef93a5359b | ||
![]() |
efb1fc9b3f | ||
![]() |
aa5faf1f36 | ||
![]() |
4723283896 | ||
![]() |
36187e07d0 | ||
![]() |
a9583b43c3 | ||
![]() |
ca54f81f58 | ||
![]() |
b4399291ef | ||
![]() |
a8df58f056 | ||
![]() |
54a89b39fb | ||
![]() |
4a931b42ab | ||
![]() |
15d73b9d20 | ||
![]() |
c2d4f73893 | ||
![]() |
31b85351f2 | ||
![]() |
c900f0ad83 | ||
![]() |
b2e6749fd2 | ||
![]() |
2437dc4e06 | ||
![]() |
115e7d08aa | ||
![]() |
d9ddbe0212 | ||
![]() |
512285e48d | ||
![]() |
642e7ecc29 | ||
![]() |
ce5a8acaf7 | ||
![]() |
3d9a5a1635 | ||
![]() |
3469a51f58 | ||
![]() |
d4b30957a3 | ||
![]() |
cc377bbebf | ||
![]() |
eec836239f | ||
![]() |
941d51a6e7 | ||
![]() |
e3243fa35b | ||
![]() |
70512c7116 | ||
![]() |
3c896d1c6a | ||
![]() |
b455d93c69 | ||
![]() |
017b2feac1 | ||
![]() |
5f47860ee1 | ||
![]() |
795498fa45 | ||
![]() |
aa1717ee77 | ||
![]() |
db6d3e63f2 | ||
![]() |
0304428d95 | ||
![]() |
74b80bfe08 | ||
![]() |
90ce65e4dc | ||
![]() |
d4d9771a71 | ||
![]() |
70ee294079 | ||
![]() |
5f4d17621f | ||
![]() |
8f4179050b | ||
![]() |
fddacd51a4 | ||
![]() |
e726ba9a8b | ||
![]() |
da1673e264 | ||
![]() |
7cd34d3709 | ||
![]() |
ec7fd05987 | ||
![]() |
34a58863e3 | ||
![]() |
3237a955e5 | ||
![]() |
8e7489c2be | ||
![]() |
df5202a2f0 | ||
![]() |
db3a5d8915 | ||
![]() |
6110f213de | ||
![]() |
e99fe98db4 | ||
![]() |
b07e28be2c | ||
![]() |
937d5fe495 | ||
![]() |
01141e5f69 | ||
![]() |
15569d0b13 | ||
![]() |
918806006c | ||
![]() |
d5e030a638 | ||
![]() |
47f1beca0c | ||
![]() |
a565b0e4c1 | ||
![]() |
10d1704899 | ||
![]() |
bc7c8e3952 | ||
![]() |
4e35515a8c | ||
![]() |
d2a3fe3ed2 | ||
![]() |
9bd1b39f9f | ||
![]() |
20a01a25e4 | ||
![]() |
68e69debff | ||
![]() |
7a333eecbe | ||
![]() |
e274bcc87d | ||
![]() |
c42cb2bbac | ||
![]() |
9ee7054823 | ||
![]() |
65e16dcac1 | ||
![]() |
97c2d6a29d | ||
![]() |
93cdee80ed | ||
![]() |
11055f61a6 | ||
![]() |
af99799e8a | ||
![]() |
926f60b2ed | ||
![]() |
0fdbb03f54 | ||
![]() |
bd0332c716 | ||
![]() |
45007809f6 | ||
![]() |
0e0fdb440c | ||
![]() |
2016cf547f | ||
![]() |
ead87e3727 | ||
![]() |
f56739fd9f | ||
![]() |
c5f2b389c3 | ||
![]() |
4cc95dda42 | ||
![]() |
0bfbe3e154 | ||
![]() |
9bd6b11007 | ||
![]() |
c013a59d16 | ||
![]() |
aa02c4de1e | ||
![]() |
fb9e2b9603 | ||
![]() |
a70bdc0776 | ||
![]() |
936460212f | ||
![]() |
8ac51e63b5 | ||
![]() |
090a8e3c95 | ||
![]() |
101cce0c1e | ||
![]() |
a935302a19 | ||
![]() |
9a0ff13cc2 | ||
![]() |
ef933c07cc | ||
![]() |
df5291e4bd | ||
![]() |
7a8c0331c1 | ||
![]() |
28e37bcaad | ||
![]() |
8a3344e78a | ||
![]() |
ce95f1f25a | ||
![]() |
f1739ce34d | ||
![]() |
1add1de23b | ||
![]() |
e25bdba16d | ||
![]() |
7c63cd1000 | ||
![]() |
4192190a96 | ||
![]() |
a733ba311c | ||
![]() |
fe472a63a0 | ||
![]() |
25b78b73d0 | ||
![]() |
b978a47925 | ||
![]() |
b44b1304b8 | ||
![]() |
a4fd756eae | ||
![]() |
8d4c1e3617 | ||
![]() |
54f5db851d | ||
![]() |
35042ebc6a | ||
![]() |
6c2dfd3d31 | ||
![]() |
543b874a10 | ||
![]() |
4258d3dc24 | ||
![]() |
949649e3a9 | ||
![]() |
82d95ac81d | ||
![]() |
3124644315 | ||
![]() |
27ba09debf | ||
![]() |
686938045b | ||
![]() |
5645858262 | ||
![]() |
410c81a51d | ||
![]() |
d19bac70ce | ||
![]() |
9b9eb409b2 | ||
![]() |
f3ad49ebc4 | ||
![]() |
394ba26d1d | ||
![]() |
cafe28fdea | ||
![]() |
22cefeb2bd | ||
![]() |
9e4cccd4db | ||
![]() |
3ff3bdf812 | ||
![]() |
45f0f983b1 | ||
![]() |
28e94513db | ||
![]() |
afe32e2c05 | ||
![]() |
0b6d40c9df | ||
![]() |
992d84c002 | ||
![]() |
9b675fe775 | ||
![]() |
35783d9a2c | ||
![]() |
f28e7b37bc | ||
![]() |
eceb9b729f | ||
![]() |
ce348596b7 | ||
![]() |
b85cd9a487 | ||
![]() |
d170885d8d | ||
![]() |
9a6bd83aa1 | ||
![]() |
0d31482647 | ||
![]() |
40c27b54b0 | ||
![]() |
0380695bba | ||
![]() |
899b77cdf4 | ||
![]() |
4819baaa07 | ||
![]() |
5a34020d23 | ||
![]() |
2b1d4ff98d | ||
![]() |
ed4843b0ed | ||
![]() |
30bd8f1570 | ||
![]() |
74d6f0a68d | ||
![]() |
5872ccc992 | ||
![]() |
9ee23d3649 | ||
![]() |
724f304e48 | ||
![]() |
a16e5a7055 | ||
![]() |
3bda858225 | ||
![]() |
701d2ce0f6 | ||
![]() |
be847a7e91 | ||
![]() |
fff0b5209c | ||
![]() |
2c5a8f0860 | ||
![]() |
103a30df2c | ||
![]() |
e4c8dbc2af | ||
![]() |
882cd8faf5 | ||
![]() |
7ba9f2e4e8 | ||
![]() |
52abe8016b | ||
![]() |
b840ab9907 | ||
![]() |
b977eb7193 | ||
![]() |
a179d5e34b | ||
![]() |
ab274147d8 | ||
![]() |
d81a844e1c | ||
![]() |
b288d5c763 | ||
![]() |
1b81af00b2 | ||
![]() |
d04f92d44e | ||
![]() |
80dc95fc03 | ||
![]() |
a8e36e7b1b | ||
![]() |
ec13350b24 | ||
![]() |
1076f8bfc2 | ||
![]() |
599cddfb67 | ||
![]() |
034af6aefd | ||
![]() |
5d2a111b9c | ||
![]() |
ca9ca7f5af | ||
![]() |
677d66d818 | ||
![]() |
750bf07e13 | ||
![]() |
2cd53410bc | ||
![]() |
ad7008a545 | ||
![]() |
bedfc2e188 | ||
![]() |
83b1a40f8b | ||
![]() |
a05dbcc2b2 | ||
![]() |
01f2697faf | ||
![]() |
fba915e04e | ||
![]() |
0d1cbc62d4 | ||
![]() |
f72cb1b5c8 | ||
![]() |
cb49fcf459 | ||
![]() |
66a08b6f18 | ||
![]() |
2554b51173 | ||
![]() |
d2e7b5ffa0 | ||
![]() |
38fd9a3ed2 | ||
![]() |
4ec236966a | ||
![]() |
696e42b5b4 | ||
![]() |
0ad1d315e8 | ||
![]() |
4697a9295a | ||
![]() |
9fbc7b96e4 | ||
![]() |
392d7ee30b | ||
![]() |
025e2a5760 | ||
![]() |
f7dc4fa2ac | ||
![]() |
13ebe89fdc | ||
![]() |
c7c3cc10c5 | ||
![]() |
e9b9159d23 | ||
![]() |
f15d5d073e | ||
![]() |
b461657407 | ||
![]() |
0da767f568 | ||
![]() |
395a73bbe0 | ||
![]() |
5870e2e378 | ||
![]() |
94a0aa6967 | ||
![]() |
2bfc4b0f5d | ||
![]() |
374f6b8e7d | ||
![]() |
33c6b3700e | ||
![]() |
eb975268f4 | ||
![]() |
b0afe4946d | ||
![]() |
5c6a399f5b | ||
![]() |
e744665171 | ||
![]() |
0b16cbddde | ||
![]() |
7ea2c6eabf | ||
![]() |
45ca11ecd0 | ||
![]() |
d8cdd82bf8 | ||
![]() |
345af5a535 | ||
![]() |
6e5895ce45 | ||
![]() |
b70a2fe4cf | ||
![]() |
da01d932ea | ||
![]() |
7cd5808766 | ||
![]() |
c98302b3c0 | ||
![]() |
cd7eedf589 | ||
![]() |
27bd8852a1 | ||
![]() |
effcf0b7cf | ||
![]() |
71b9db688a | ||
![]() |
8be6dc7758 | ||
![]() |
569f0b303b | ||
![]() |
15e3add909 | ||
![]() |
68c0c4d94f | ||
![]() |
a550a1c55c | ||
![]() |
832588f861 | ||
![]() |
73bcabd2fa | ||
![]() |
da8c9f3357 | ||
![]() |
6cfef4f476 | ||
![]() |
e9fbfaf536 | ||
![]() |
0407c56605 | ||
![]() |
1a63443e02 | ||
![]() |
0345f798bd | ||
![]() |
ee9d4d56a9 | ||
![]() |
44bafa478e | ||
![]() |
ce57e02769 | ||
![]() |
64cd794c02 | ||
![]() |
9c8ae96f25 | ||
![]() |
e973360aa7 | ||
![]() |
697e5b8b6c | ||
![]() |
017f609a51 | ||
![]() |
22f0d44fed | ||
![]() |
0fdf58b1ec | ||
![]() |
051bf2968a | ||
![]() |
4fd83631ec | ||
![]() |
a29d54c497 | ||
![]() |
ed6762b8ee | ||
![]() |
b6a0c7e57f | ||
![]() |
ba0be28d45 | ||
![]() |
ef5a435480 | ||
![]() |
61ad808d26 | ||
![]() |
426e33d3a6 | ||
![]() |
d6d8bce0e4 | ||
![]() |
7c76f2b764 | ||
![]() |
735516ed37 | ||
![]() |
dbf0fb8e86 | ||
![]() |
f50b5e1a58 | ||
![]() |
50c74ab821 | ||
![]() |
a1b76ac0a9 | ||
![]() |
49ca325845 | ||
![]() |
703e98ec45 | ||
![]() |
208f798b07 | ||
![]() |
059a028c0c | ||
![]() |
7269d171a7 | ||
![]() |
3ca2d99a47 | ||
![]() |
9ab60935a4 | ||
![]() |
c5437235f3 | ||
![]() |
537aac24f7 | ||
![]() |
8f20dd8425 | ||
![]() |
1639471250 | ||
![]() |
fcc5f00e75 | ||
![]() |
80b06da56b | ||
![]() |
2c1b0bb77b | ||
![]() |
f5c8406353 | ||
![]() |
c7f76944f3 | ||
![]() |
6542a70c05 | ||
![]() |
5bb94f1d9e | ||
![]() |
2378ea9c07 | ||
![]() |
cd30538130 | ||
![]() |
356ee22cc5 | ||
![]() |
281515cd9f | ||
![]() |
c0055b7a7f | ||
![]() |
6bdbafcd5c | ||
![]() |
a29955ff96 | ||
![]() |
91cca3cff3 | ||
![]() |
716f5de517 | ||
![]() |
aac0e782d0 | ||
![]() |
c69884fa3f | ||
![]() |
06675e4fb2 | ||
![]() |
ad67710f7e | ||
![]() |
654601ff23 | ||
![]() |
d29ef59514 | ||
![]() |
e3e8b9afb4 | ||
![]() |
a8e3af3586 | ||
![]() |
11ff7d1ff9 | ||
![]() |
b04b16825f | ||
![]() |
0f43a7f36b | ||
![]() |
95e9a63dcb | ||
![]() |
146d958fc0 | ||
![]() |
bb349d6085 | ||
![]() |
cb9053cd79 | ||
![]() |
4146f19814 | ||
![]() |
79eca7c098 | ||
![]() |
723c53e1df | ||
![]() |
daca3b558b | ||
![]() |
2075480b14 | ||
![]() |
e43194d59b | ||
![]() |
8bbc27fd39 | ||
![]() |
9a9a466bd4 | ||
![]() |
92c533f42a | ||
![]() |
863b7eee8b | ||
![]() |
417294339d | ||
![]() |
6aaefc663b | ||
![]() |
a6b10ac4c0 | ||
![]() |
2b7b92edee | ||
![]() |
f4de0cef26 | ||
![]() |
1b5a9c1a1f | ||
![]() |
a09f222b4c | ||
![]() |
5fb76b4918 | ||
![]() |
27d5a1d5bb | ||
![]() |
ba1917d23c | ||
![]() |
0b37d50dac | ||
![]() |
9275bf40b2 | ||
![]() |
4431fbbe5a | ||
![]() |
8c64ce67fc | ||
![]() |
1ddc4a5c5d | ||
![]() |
081cab821b | ||
![]() |
efe5c76469 | ||
![]() |
16c9b169f2 | ||
![]() |
73f20a8f1e | ||
![]() |
70e430cff1 | ||
![]() |
aa21aee14b | ||
![]() |
59ff77e171 | ||
![]() |
045170a67e | ||
![]() |
c9deea1f6f | ||
![]() |
c10f2a22b6 | ||
![]() |
45f24c63cb | ||
![]() |
18cb0bca19 | ||
![]() |
071dc08405 | ||
![]() |
b8181974ec | ||
![]() |
816900a6cf | ||
![]() |
2438fc8b31 | ||
![]() |
8b84f991e1 | ||
![]() |
3c98ec5b48 | ||
![]() |
e1f863afa4 | ||
![]() |
f40a036d97 | ||
![]() |
3f07e232aa | ||
![]() |
f44e23b8cc | ||
![]() |
67a6776fba | ||
![]() |
cdaf45f91c | ||
![]() |
e1b94487ef | ||
![]() |
2531ebf685 | ||
![]() |
01909b07ce | ||
![]() |
39ea08b7cb | ||
![]() |
413ffd7470 | ||
![]() |
66645baa75 | ||
![]() |
021f0be119 | ||
![]() |
1962fc88d6 | ||
![]() |
fa12301e08 | ||
![]() |
9f934abd48 | ||
![]() |
4680954112 | ||
![]() |
7e6ffc34fb | ||
![]() |
95135af6b3 | ||
![]() |
c81a47a692 | ||
![]() |
3bd9fc9f43 | ||
![]() |
c664d6dc32 | ||
![]() |
a182ec12cf | ||
![]() |
70bf316f9d | ||
![]() |
2979fb4a9b | ||
![]() |
a33be2d67a | ||
![]() |
c6878f9c9d | ||
![]() |
1d65f4471b | ||
![]() |
e9de3748bd | ||
![]() |
ea40afbe03 | ||
![]() |
01c70868ef | ||
![]() |
66d701e788 | ||
![]() |
6eff14a71d | ||
![]() |
506152d4e7 | ||
![]() |
6e9c96a0e5 | ||
![]() |
e58be4d57e | ||
![]() |
e94edbdb8f | ||
![]() |
0c8d2ea557 | ||
![]() |
07e3456631 | ||
![]() |
e65d554309 | ||
![]() |
f5652cf946 | ||
![]() |
399d0a5bf0 | ||
![]() |
589521bfd8 | ||
![]() |
d802b6ab44 | ||
![]() |
45863b4651 | ||
![]() |
f34c2b1714 | ||
![]() |
78750bf753 | ||
![]() |
65d585496c | ||
![]() |
194d3b9e17 | ||
![]() |
b4b85e569e | ||
![]() |
daabfeb0e2 | ||
![]() |
c61b57f7ab | ||
![]() |
7cae0920b8 | ||
![]() |
920e4ba6b1 | ||
![]() |
16e58a1911 | ||
![]() |
ec7570f93e | ||
![]() |
ae2993ecae | ||
![]() |
ee778ca8f9 | ||
![]() |
a2ff5fbfdb | ||
![]() |
eeb4be6e4b | ||
![]() |
aad3306bdf | ||
![]() |
35b727ac39 | ||
![]() |
abf07966be | ||
![]() |
a1c81955d3 | ||
![]() |
ad7538f394 | ||
![]() |
c0a909296e | ||
![]() |
7186cd09bf | ||
![]() |
db8583b1c6 | ||
![]() |
07be61585c | ||
![]() |
8bdd811a16 | ||
![]() |
c69d88c45a | ||
![]() |
b18fa2ebc2 | ||
![]() |
f838319455 | ||
![]() |
0d852474be | ||
![]() |
dd5a198222 | ||
![]() |
2d067f7498 | ||
![]() |
a6c1e42c0a | ||
![]() |
ff783d15e8 | ||
![]() |
e1f14aca9b | ||
![]() |
65ff45e202 | ||
![]() |
f330267361 | ||
![]() |
1de28fa566 | ||
![]() |
b08001183e | ||
![]() |
0121adec03 | ||
![]() |
4daeb41f0e | ||
![]() |
b2df22469b | ||
![]() |
1bf80e861d | ||
![]() |
5bb2beb179 | ||
![]() |
852a540cb0 | ||
![]() |
8b38aebbc7 | ||
![]() |
fa3c25ab66 | ||
![]() |
30df1dbe3f | ||
![]() |
6d61e3590d | ||
![]() |
e71650e6ab | ||
![]() |
d81b3805e3 | ||
![]() |
416253496d | ||
![]() |
29ec5bff60 | ||
![]() |
6c691a73bd | ||
![]() |
74cb2e054f | ||
![]() |
5b6329a12e | ||
![]() |
973ba58744 | ||
![]() |
1f60bcb2d0 | ||
![]() |
8e8354caec | ||
![]() |
e26c547afc | ||
![]() |
fc13fdceca | ||
![]() |
d585b1fcb6 | ||
![]() |
57bd0ef4f5 | ||
![]() |
d140f99b68 | ||
![]() |
90766685ae | ||
![]() |
d65638efe1 | ||
![]() |
b34572e7ce | ||
![]() |
c4c0cd1b77 | ||
![]() |
9f42f17088 | ||
![]() |
d570870be5 | ||
![]() |
8671bf70ab | ||
![]() |
e26729b483 | ||
![]() |
d4113d9569 | ||
![]() |
c5a5dd859e | ||
![]() |
0961fa1830 | ||
![]() |
f18b8d464d | ||
![]() |
98d7519274 | ||
![]() |
1326a7764a | ||
![]() |
97568195d6 | ||
![]() |
8d2d3a6540 | ||
![]() |
4f6730621a | ||
![]() |
a4bb695fc3 | ||
![]() |
a57bdfffb7 | ||
![]() |
bdb513a660 | ||
![]() |
b5ce53c907 | ||
![]() |
b556fae08f | ||
![]() |
f87ab9a99f | ||
![]() |
a5c973f86b | ||
![]() |
6b2b89da78 | ||
![]() |
7d4330b57a | ||
![]() |
225d14cbbe | ||
![]() |
d2a84c96a4 | ||
![]() |
48f0d9c15e | ||
![]() |
9c7e91a1e9 | ||
![]() |
91e74204b2 | ||
![]() |
fdee4efe98 | ||
![]() |
59bb6dae14 | ||
![]() |
3300f8bafb | ||
![]() |
c61e56d8a6 | ||
![]() |
ad15659fb2 | ||
![]() |
efffc3142a | ||
![]() |
b0a9b58958 | ||
![]() |
4ea46c5765 | ||
![]() |
7de0ba95d0 | ||
![]() |
3ad30c3ff5 | ||
![]() |
3ed2b41a5a | ||
![]() |
3bf4cf5c3f | ||
![]() |
52e7c166fc | ||
![]() |
08a78a1654 | ||
![]() |
81ceefe2f1 | ||
![]() |
c2d04bc478 | ||
![]() |
36fffa5b23 | ||
![]() |
841d5c0299 | ||
![]() |
0bdca8fd9e | ||
![]() |
f48275bc11 | ||
![]() |
aa369de280 | ||
![]() |
543404bcb8 | ||
![]() |
b7166d7da0 | ||
![]() |
cf54608c71 | ||
![]() |
ec20691188 | ||
![]() |
c1af36ac20 | ||
![]() |
f6e8eb52f0 | ||
![]() |
ad7db90c80 | ||
![]() |
cbfb8eb805 | ||
![]() |
df60818883 | ||
![]() |
d5de93b8fa | ||
![]() |
ab6da9530d | ||
![]() |
ca82376657 | ||
![]() |
87f18aa8d7 | ||
![]() |
6340d61397 | ||
![]() |
80d1e36542 | ||
![]() |
f75909db4c | ||
![]() |
12d47455ba | ||
![]() |
9acf591242 | ||
![]() |
bab8673055 | ||
![]() |
3851a77134 | ||
![]() |
8e324e67a4 | ||
![]() |
10245b40ee | ||
![]() |
9534ca2da1 | ||
![]() |
f9d11265d0 | ||
![]() |
d85c125bef | ||
![]() |
62d3d7a32d | ||
![]() |
a3f4a05b0c | ||
![]() |
86465c418d | ||
![]() |
a63d3bf0d6 | ||
![]() |
762e4951f2 | ||
![]() |
d4fc54be18 | ||
![]() |
f327f4cc67 | ||
![]() |
9ba645503b | ||
![]() |
5406693a1e | ||
![]() |
d55955f7d8 | ||
![]() |
765770aaa5 | ||
![]() |
c3e0b746d7 | ||
![]() |
accb0bc35a | ||
![]() |
b16530bb6a | ||
![]() |
ad00553bf8 | ||
![]() |
b70bef77cb | ||
![]() |
ac47b7b8cb | ||
![]() |
abe0817553 | ||
![]() |
ab431b378a | ||
![]() |
a534196315 | ||
![]() |
cd421f98d7 | ||
![]() |
b33d660f88 | ||
![]() |
245c9ae446 | ||
![]() |
8d39431d68 | ||
![]() |
739a231259 | ||
![]() |
426fd14b11 | ||
![]() |
4735372682 | ||
![]() |
4b3fa13163 | ||
![]() |
d40250c3d6 | ||
![]() |
7d2cfd2aaa | ||
![]() |
11fdd417dd | ||
![]() |
1b7b23fab6 | ||
![]() |
10882af7c8 | ||
![]() |
6c573cc9fd | ||
![]() |
2782430887 | ||
![]() |
7522c29f25 | ||
![]() |
706424f0d2 | ||
![]() |
57d404a99b | ||
![]() |
19e2e169b1 | ||
![]() |
2a6ea79260 | ||
![]() |
40333066d6 | ||
![]() |
6d596063de | ||
![]() |
a7c3c9b77d | ||
![]() |
a01de8d944 | ||
![]() |
c0e7774937 | ||
![]() |
00c76003cb | ||
![]() |
b29f87a978 | ||
![]() |
2dc843cddd | ||
![]() |
9f08b4aa15 | ||
![]() |
a84fbd6a74 | ||
![]() |
f8af3a0005 | ||
![]() |
83e51c815d | ||
![]() |
ff24700156 | ||
![]() |
7683691f5a | ||
![]() |
3479f88dab | ||
![]() |
86fc2f157e | ||
![]() |
ffa07c649b | ||
![]() |
2bd61abd71 | ||
![]() |
66df953da1 | ||
![]() |
550a586d2a | ||
![]() |
16473ab691 | ||
![]() |
c5afd0322e | ||
![]() |
c4563c429c | ||
![]() |
eeacace02a | ||
![]() |
caf3807bcc | ||
![]() |
6c7e85d3d8 | ||
![]() |
f0db7623d1 | ||
![]() |
26ed6539ba | ||
![]() |
a9347cd248 | ||
![]() |
60002fc145 | ||
![]() |
20a8654be2 | ||
![]() |
25411333da | ||
![]() |
07d4282603 | ||
![]() |
4bd77797fc | ||
![]() |
03ffbe00c1 | ||
![]() |
5a9099f49c | ||
![]() |
b501ee2b8d | ||
![]() |
a7c3368635 | ||
![]() |
84ee724aa3 | ||
![]() |
da7fe59834 | ||
![]() |
3710dc1e3b | ||
![]() |
db03c7428c | ||
![]() |
9c6fe98f76 | ||
![]() |
c03af0afb3 | ||
![]() |
d109d7f0c5 | ||
![]() |
bf9b257eab | ||
![]() |
11dc0c1774 | ||
![]() |
0a5eda0777 | ||
![]() |
a657a6d2f6 | ||
![]() |
121acd1da7 | ||
![]() |
ec86079747 | ||
![]() |
f1b0a9cb32 | ||
![]() |
0b6cb77b3c | ||
![]() |
8a740d5087 | ||
![]() |
8288774787 | ||
![]() |
d349e3a88e | ||
![]() |
2ef9fbc111 | ||
![]() |
78f81de252 | ||
![]() |
8d9ee8e35b | ||
![]() |
e66ba2e424 | ||
![]() |
fafb48e88f | ||
![]() |
6272c0e901 | ||
![]() |
54314e5bb9 | ||
![]() |
ffbcf19156 | ||
![]() |
dcc8149f58 | ||
![]() |
d2c54fd5fe | ||
![]() |
f40a7b1c77 | ||
![]() |
16f758e13f | ||
![]() |
c333cc0776 | ||
![]() |
3263e81972 | ||
![]() |
397a08afca | ||
![]() |
19070e4b04 | ||
![]() |
0bbc255814 | ||
![]() |
1b06f4ca4f | ||
![]() |
b3eeac637f | ||
![]() |
480b42b36d | ||
![]() |
436074c67a | ||
![]() |
c9a2117570 | ||
![]() |
6155b001b4 | ||
![]() |
8f05af7810 | ||
![]() |
33ac7916d3 | ||
![]() |
461c1ddf3d | ||
![]() |
2428f74fbd | ||
![]() |
bb8e892323 | ||
![]() |
3eecf4ae8a | ||
![]() |
4a53d4cb56 | ||
![]() |
1818a29c29 | ||
![]() |
dd2efc360b | ||
![]() |
8e64992f47 | ||
![]() |
040c72f1c8 | ||
![]() |
d95a1bac3e | ||
![]() |
c6b295b5a0 | ||
![]() |
2a4a6bec18 | ||
![]() |
0d3f8c7b9f | ||
![]() |
d299b97261 | ||
![]() |
5b8ebed81b | ||
![]() |
bb28265261 | ||
![]() |
46f33e5051 | ||
![]() |
06669b12e8 | ||
![]() |
1ca126381b | ||
![]() |
bf5de81b24 | ||
![]() |
d717ffd1a0 | ||
![]() |
c271d73dbd | ||
![]() |
e1a8980d6c | ||
![]() |
ec7ff88dda | ||
![]() |
5b695766ae | ||
![]() |
f5b6909cca | ||
![]() |
98d348893b | ||
![]() |
c942c31e38 | ||
![]() |
70cbdd1117 | ||
![]() |
1114a35e0a | ||
![]() |
d12e5a44b8 | ||
![]() |
34420444db | ||
![]() |
38eb50bf5c | ||
![]() |
6705679cf3 | ||
![]() |
10635bccc9 | ||
![]() |
dee0ec50b9 | ||
![]() |
401bdedae8 | ||
![]() |
99e51a2123 | ||
![]() |
d43ce53f9a | ||
![]() |
f6385fae50 | ||
![]() |
6da1bb5b22 | ||
![]() |
64e1cfcbba | ||
![]() |
fbfcebf417 | ||
![]() |
d15cf994a2 | ||
![]() |
c71887db43 | ||
![]() |
7c634f3615 | ||
![]() |
874b961680 | ||
![]() |
2c1ee698cc | ||
![]() |
b0f0dd3227 | ||
![]() |
de477f7b6c | ||
![]() |
440ede313b | ||
![]() |
976c6c5e41 | ||
![]() |
7e6d25314d | ||
![]() |
cc5c3f7b2c | ||
![]() |
1d62dc4621 | ||
![]() |
e2496562f9 | ||
![]() |
c4a2f8d64f | ||
![]() |
6c620f6f43 | ||
![]() |
af29adb558 | ||
![]() |
3c97775573 | ||
![]() |
f953dc3f5e | ||
![]() |
04b431f191 | ||
![]() |
5cd6c524ea | ||
![]() |
37676757e3 | ||
![]() |
1c82daacb2 | ||
![]() |
9f0a5c5ef0 | ||
![]() |
9bb86132c6 | ||
![]() |
2137a4f663 | ||
![]() |
c9143dd3d8 | ||
![]() |
66d58504d0 | ||
![]() |
0def333550 | ||
![]() |
dea452bdfd | ||
![]() |
d504ed8a9b | ||
![]() |
9503beca6c | ||
![]() |
dfe4884d16 | ||
![]() |
f10f6d176f | ||
![]() |
4e7aa41e3f | ||
![]() |
d91812730b | ||
![]() |
54cf37e917 | ||
![]() |
3de803be2f | ||
![]() |
5ca59807d9 | ||
![]() |
5c3b43cd63 | ||
![]() |
1a6baf223c | ||
![]() |
74c9aa8ac0 | ||
![]() |
fb16727180 | ||
![]() |
9842b035e3 | ||
![]() |
f6b5a52104 | ||
![]() |
f650b1e83c | ||
![]() |
03cbc9b004 | ||
![]() |
43cae922f3 | ||
![]() |
c5c7e7fc4d | ||
![]() |
0c1cf43519 | ||
![]() |
cbbf85c555 | ||
![]() |
56e974ab80 | ||
![]() |
9398052b65 | ||
![]() |
6a8899677d | ||
![]() |
3b34538038 | ||
![]() |
6cf1e05993 | ||
![]() |
baf1336761 | ||
![]() |
4f0e426a12 | ||
![]() |
d5bf051e79 | ||
![]() |
c7c982b67b | ||
![]() |
f7f0d3b1fb | ||
![]() |
d4ab4d16e8 | ||
![]() |
aeed1679d8 | ||
![]() |
6fc67d83f4 | ||
![]() |
06ffe995e1 | ||
![]() |
93bf4d5411 | ||
![]() |
19f2f1fa86 | ||
![]() |
5e94fdcfd5 | ||
![]() |
ec6f5c17c8 | ||
![]() |
758c87f564 | ||
![]() |
b6dde41000 | ||
![]() |
648c83ea03 |
463 changed files with 38322 additions and 11774 deletions
|
@ -43,4 +43,4 @@ Mnesia.nonode@nohost/
|
|||
/ejabberd-*.rpm
|
||||
/ejabberd-*.run
|
||||
/ejabberd-*.tar.gz
|
||||
|
||||
/.github/container/Dockerfile
|
||||
|
|
3
.github/ISSUE_TEMPLATE/bug_report.md
vendored
3
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -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
|
||||
|
||||
|
|
9
.github/ISSUE_TEMPLATE/feature_request.md
vendored
9
.github/ISSUE_TEMPLATE/feature_request.md
vendored
|
@ -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.
|
||||
|
|
219
.github/container/Dockerfile
vendored
219
.github/container/Dockerfile
vendored
|
@ -1,16 +1,29 @@
|
|||
FROM alpine:3.16 AS build
|
||||
ARG VERSION=master
|
||||
#' Define default build variables
|
||||
ARG OTP_VSN='27.3.4.3'
|
||||
ARG ELIXIR_VSN='1.18.4'
|
||||
ARG UID='9000'
|
||||
ARG USER='ejabberd'
|
||||
ARG HOME="opt/$USER"
|
||||
ARG BUILD_DIR="/$USER"
|
||||
ARG VERSION='master'
|
||||
|
||||
RUN apk upgrade --update musl \
|
||||
&& apk add \
|
||||
################################################################################
|
||||
#' Compile ejabberdapi
|
||||
FROM docker.io/golang:1.25-alpine AS api
|
||||
RUN go install -v \
|
||||
github.com/processone/ejabberd-api/cmd/ejabberd@master \
|
||||
&& mv bin/ejabberd bin/ejabberdapi
|
||||
|
||||
################################################################################
|
||||
#' build and install ejabberd directly from source
|
||||
FROM docker.io/erlang:${OTP_VSN}-alpine AS ejabberd
|
||||
|
||||
RUN apk -U add --no-cache \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
build-base \
|
||||
curl \
|
||||
elixir \
|
||||
erlang-odbc \
|
||||
erlang-reltool \
|
||||
expat-dev \
|
||||
file \
|
||||
gd-dev \
|
||||
|
@ -19,37 +32,67 @@ RUN apk upgrade --update musl \
|
|||
libpng-dev \
|
||||
libwebp-dev \
|
||||
linux-pam-dev \
|
||||
openssl \
|
||||
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
|
||||
ENV ERL_FLAGS="+JPperf true"
|
||||
RUN make install clean
|
||||
|
||||
RUN mix local.hex --force \
|
||||
&& mix local.rebar --force
|
||||
|
||||
COPY . ./ejabberd
|
||||
|
||||
WORKDIR ejabberd
|
||||
ARG BUILD_DIR
|
||||
COPY / $BUILD_DIR/
|
||||
|
||||
WORKDIR $BUILD_DIR
|
||||
RUN mv .github/container/ejabberdctl.template . \
|
||||
&& mv .github/container/ejabberd.yml.example . \
|
||||
&& ./autogen.sh \
|
||||
&& ./configure --with-rebar=mix --enable-all \
|
||||
&& 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 BINPATH=$(dirname $(find /opt -name msgs))/bin/ \
|
||||
&& mkdir -p $BINPATH \
|
||||
&& cp tools/captcha*.sh $BINPATH
|
||||
RUN cp -p $BUILD_DIR/tools/captcha*.sh $HOME-$VERSION/lib
|
||||
|
||||
RUN [ ! -d .ejabberd-modules ] || cp -r .ejabberd-modules /opt/ejabberd/
|
||||
RUN find "$HOME-$VERSION/bin" -name 'ejabberd' -delete \
|
||||
&& find "$HOME-$VERSION/releases" -name 'COOKIE' -delete
|
||||
|
||||
RUN export PEM=/opt/ejabberd/conf/server.pem \
|
||||
&& curl -o "/opt/ejabberd/conf/cacert.pem" 'https://curl.se/ca/cacert.pem' \
|
||||
RUN wget -O "$HOME/conf/cacert.pem" 'https://curl.se/ca/cacert.pem'
|
||||
|
||||
#' Prepare ejabberd for runtime
|
||||
RUN apk -U add --no-cache \
|
||||
git \
|
||||
libcap \
|
||||
openssl
|
||||
|
||||
RUN mkdir -p usr/local/bin $HOME/conf $HOME/database $HOME/logs $HOME/upload
|
||||
|
||||
COPY --from=api /go/bin/ejabberdapi usr/local/bin/
|
||||
|
||||
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 \
|
||||
|
@ -57,63 +100,107 @@ 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.16
|
||||
ENV HOME=/opt/ejabberd
|
||||
ARG VERSION=master
|
||||
RUN sed -i 's|^#CTL_OVER_HTTP=|CTL_OVER_HTTP=../|' "$HOME/conf/ejabberdctl.cfg"
|
||||
|
||||
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/*
|
||||
|
||||
COPY --from=build /opt /opt
|
||||
RUN echo -e \
|
||||
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=/opt/ejabberd/conf \
|
||||
\nexport LOGS_DIR=/opt/ejabberd/logs \
|
||||
\nexport SPOOL_DIR=/opt/ejabberd/database \
|
||||
\nexec /opt/ejabberd-$VERSION/bin/ejabberdctl \"\$@\"" > /usr/local/bin/ejabberdctl \
|
||||
&& chmod +x /usr/local/bin/ejabberdctl
|
||||
\nexport EMA=\"\$EJABBERD_MACRO_ADMIN\" \
|
||||
\nexport HOST=\"\${EJABBERD_MACRO_HOST:-localhost}\" \
|
||||
\nif [ -n \"\$EMA\" ] \
|
||||
\nthen \
|
||||
\n if [ \"\$EMA\" != \"\${EMA%%@*}\" ] \
|
||||
\n then \
|
||||
\n export USERNAME=\"\${EMA%%@*}\" \
|
||||
\n export HOST=\"\${EMA##*@}\" \
|
||||
\n else \
|
||||
\n export USERNAME=\"\$EMA\" \
|
||||
\n export SHOW_WARNING=\"true\" \
|
||||
\n fi \
|
||||
\nelif [ -n \"\$REGISTER_ADMIN_PASSWORD\" ] \
|
||||
\nthen \
|
||||
\n export USERNAME=\"admin\" \
|
||||
\nelse \
|
||||
\n export USERNAME=\"\$(od -A n -N 8 -t x8 /dev/urandom)\" \
|
||||
\nfi \
|
||||
\nexport EJABBERD_MACRO_ADMIN=\"\$USERNAME@\$HOST\" \
|
||||
\n[ -n \"\$SHOW_WARNING\" ] && echo \"WARNING: The EJABBERD_MACRO_ADMIN environment variable was set to '\$EMA', but it should include the host... I'll overwrite it to become '\$EJABBERD_MACRO_ADMIN'.\" \
|
||||
\n[ -n \"\$CTL_ON_CREATE\" ] && export SEPARATOR=\";\" \
|
||||
\n[ -n \"\$REGISTER_ADMIN_PASSWORD\" ] && export CTL_ON_CREATE=\"register \${EJABBERD_MACRO_ADMIN%%@*} \${EJABBERD_MACRO_ADMIN##*@} \$REGISTER_ADMIN_PASSWORD \$SEPARATOR \$CTL_ON_CREATE\" \
|
||||
\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 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
|
||||
ARG UID
|
||||
RUN chown -R $UID:$UID $HOME
|
||||
|
||||
RUN cp /rootfs/$HOME-$VERSION/lib/captcha*.sh usr/local/bin/
|
||||
RUN mkdir $HOME/sql \
|
||||
&& find /rootfs/$HOME-$VERSION/lib/ -name *.sql -exec cp {} $HOME/sql \; -exec cp {} $HOME/database \;
|
||||
|
||||
################################################################################
|
||||
#' Remove erlang/OTP & rebar3
|
||||
FROM docker.io/erlang:${OTP_VSN}-alpine AS runtime
|
||||
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
|
||||
|
||||
#' Update alpine, finalize runtime environment
|
||||
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 \
|
||||
curl \
|
||||
tini \
|
||||
&& rm /tmp/runDeps \
|
||||
&& 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
|
||||
|
||||
RUN ln -fs /usr/local/bin/ /opt/ejabberd/bin
|
||||
RUN rm -rf /home \
|
||||
&& ln -fs /opt /home
|
||||
|
||||
################################################################################
|
||||
#' Build together production image
|
||||
FROM scratch
|
||||
ARG USER
|
||||
ARG HOME
|
||||
|
||||
COPY --from=runtime / /
|
||||
COPY --from=ejabberd /rootfs /
|
||||
|
||||
HEALTHCHECK \
|
||||
--interval=1m \
|
||||
--timeout=5s \
|
||||
--start-period=5s \
|
||||
--retries=10 \
|
||||
CMD /usr/local/bin/ejabberdctl status
|
||||
CMD ejabberdctl status
|
||||
|
||||
WORKDIR $HOME
|
||||
USER ejabberd
|
||||
VOLUME ["$HOME/conf", "$HOME/database", "$HOME/logs", "$HOME/upload"]
|
||||
EXPOSE 1883 4369-4399 5210 5222 5269 5280 5443
|
||||
WORKDIR /$HOME
|
||||
USER $USER
|
||||
VOLUME ["/$HOME"]
|
||||
EXPOSE 1880 1883 4369-4399 5210 5222 5269 5280 5443
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/ejabberdctl"]
|
||||
ENTRYPOINT ["/sbin/tini","--","ejabberdctl"]
|
||||
CMD ["foreground"]
|
||||
|
|
278
.github/container/ejabberd.yml.example
vendored
Normal file
278
.github/container/ejabberd.yml.example
vendored
Normal file
|
@ -0,0 +1,278 @@
|
|||
###
|
||||
### ejabberd configuration file
|
||||
###
|
||||
### The parameters used in this configuration file are explained at
|
||||
###
|
||||
### https://docs.ejabberd.im/admin/configuration
|
||||
###
|
||||
### The configuration file is written in YAML.
|
||||
### *******************************************************
|
||||
### ******* !!! WARNING !!! *******
|
||||
### ******* YAML IS INDENTATION SENSITIVE *******
|
||||
### ******* MAKE SURE YOU INDENT SECTIONS CORRECTLY *******
|
||||
### *******************************************************
|
||||
### Refer to http://en.wikipedia.org/wiki/YAML for the brief description.
|
||||
###
|
||||
|
||||
define_macro:
|
||||
HOST: localhost
|
||||
## ADMIN: ... # set by /usr/local/bin/ejabberdctl
|
||||
PORT_C2S: 5222
|
||||
PORT_C2S_TLS: 5223
|
||||
PORT_S2S: 5269
|
||||
PORT_HTTP_TLS: 5443
|
||||
PORT_HTTP: 5280
|
||||
PORT_BROWSER: 1880
|
||||
PORT_STUN: 5478
|
||||
PORT_MQTT: 1883
|
||||
PORT_PROXY65: 7777
|
||||
|
||||
hosts:
|
||||
- HOST
|
||||
|
||||
loglevel: info
|
||||
|
||||
## If you already have certificates, list them here
|
||||
# certfiles:
|
||||
# - /etc/letsencrypt/live/domain.tld/fullchain.pem
|
||||
# - /etc/letsencrypt/live/domain.tld/privkey.pem
|
||||
|
||||
ca_file: /opt/ejabberd/conf/cacert.pem
|
||||
certfiles:
|
||||
- /opt/ejabberd/conf/server.pem
|
||||
|
||||
listen:
|
||||
-
|
||||
port: PORT_C2S
|
||||
ip: "::"
|
||||
module: ejabberd_c2s
|
||||
max_stanza_size: 262144
|
||||
shaper: c2s_shaper
|
||||
access: c2s
|
||||
starttls_required: true
|
||||
-
|
||||
port: PORT_C2S_TLS
|
||||
ip: "::"
|
||||
module: ejabberd_c2s
|
||||
max_stanza_size: 262144
|
||||
shaper: c2s_shaper
|
||||
access: c2s
|
||||
tls: true
|
||||
-
|
||||
port: PORT_S2S
|
||||
ip: "::"
|
||||
module: ejabberd_s2s_in
|
||||
max_stanza_size: 524288
|
||||
shaper: s2s_shaper
|
||||
-
|
||||
port: PORT_HTTP_TLS
|
||||
ip: "::"
|
||||
module: ejabberd_http
|
||||
tls: true
|
||||
request_handlers:
|
||||
/admin: ejabberd_web_admin
|
||||
/api: mod_http_api
|
||||
/bosh: mod_bosh
|
||||
/captcha: ejabberd_captcha
|
||||
/upload: mod_http_upload
|
||||
/ws: ejabberd_http_ws
|
||||
-
|
||||
port: PORT_HTTP
|
||||
ip: "::"
|
||||
module: ejabberd_http
|
||||
request_handlers:
|
||||
/admin: ejabberd_web_admin
|
||||
/.well-known/acme-challenge: ejabberd_acme
|
||||
-
|
||||
port: PORT_BROWSER
|
||||
ip: "::"
|
||||
module: ejabberd_http
|
||||
request_handlers:
|
||||
/: ejabberd_web_admin
|
||||
-
|
||||
port: "unix:../sockets/ctl_over_http.sock"
|
||||
module: ejabberd_http
|
||||
unix_socket:
|
||||
mode: '0600'
|
||||
request_handlers:
|
||||
/ctl: ejabberd_ctl
|
||||
-
|
||||
port: PORT_STUN
|
||||
ip: "::"
|
||||
transport: udp
|
||||
module: ejabberd_stun
|
||||
use_turn: true
|
||||
## The server's public IPv4 address:
|
||||
# turn_ipv4_address: "203.0.113.3"
|
||||
## The server's public IPv6 address:
|
||||
# turn_ipv6_address: "2001:db8::3"
|
||||
-
|
||||
port: PORT_MQTT
|
||||
ip: "::"
|
||||
module: mod_mqtt
|
||||
backlog: 1000
|
||||
|
||||
s2s_use_starttls: optional
|
||||
|
||||
acl:
|
||||
local:
|
||||
user_regexp: ""
|
||||
loopback:
|
||||
ip:
|
||||
- 127.0.0.0/8
|
||||
- ::1/128
|
||||
admin:
|
||||
user:
|
||||
- ADMIN
|
||||
|
||||
access_rules:
|
||||
local:
|
||||
allow: local
|
||||
c2s:
|
||||
deny: blocked
|
||||
allow: all
|
||||
announce:
|
||||
allow: admin
|
||||
configure:
|
||||
allow: admin
|
||||
muc_create:
|
||||
allow: local
|
||||
pubsub_createnode:
|
||||
allow: local
|
||||
trusted_network:
|
||||
allow: loopback
|
||||
|
||||
api_permissions:
|
||||
"console commands":
|
||||
from: ejabberd_ctl
|
||||
who: all
|
||||
what: "*"
|
||||
"webadmin commands":
|
||||
from: ejabberd_web_admin
|
||||
who: admin
|
||||
what: "*"
|
||||
"admin access":
|
||||
who:
|
||||
access:
|
||||
allow:
|
||||
- acl: loopback
|
||||
- acl: admin
|
||||
oauth:
|
||||
scope: "ejabberd:admin"
|
||||
access:
|
||||
allow:
|
||||
- acl: loopback
|
||||
- acl: admin
|
||||
what:
|
||||
- "*"
|
||||
- "!stop"
|
||||
- "!start"
|
||||
"public commands":
|
||||
who:
|
||||
ip: 127.0.0.1/8
|
||||
what:
|
||||
- status
|
||||
- connected_users_number
|
||||
|
||||
shaper:
|
||||
normal:
|
||||
rate: 3000
|
||||
burst_size: 20000
|
||||
fast: 100000
|
||||
|
||||
shaper_rules:
|
||||
max_user_sessions: 10
|
||||
max_user_offline_messages:
|
||||
5000: admin
|
||||
100: all
|
||||
c2s_shaper:
|
||||
none: admin
|
||||
normal: all
|
||||
s2s_shaper: fast
|
||||
|
||||
modules:
|
||||
mod_adhoc: {}
|
||||
mod_admin_extra: {}
|
||||
mod_announce:
|
||||
access: announce
|
||||
mod_avatar: {}
|
||||
mod_blocking: {}
|
||||
mod_bosh: {}
|
||||
mod_caps: {}
|
||||
mod_carboncopy: {}
|
||||
mod_client_state: {}
|
||||
mod_configure: {}
|
||||
mod_disco: {}
|
||||
mod_fail2ban: {}
|
||||
mod_http_api: {}
|
||||
mod_http_upload:
|
||||
put_url: https://@HOST_URL_ENCODE@:5443/upload
|
||||
custom_headers:
|
||||
"Access-Control-Allow-Origin": "https://@HOST@"
|
||||
"Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS"
|
||||
"Access-Control-Allow-Headers": "Content-Type"
|
||||
mod_last: {}
|
||||
mod_mam:
|
||||
## Mnesia is limited to 2GB, better to use an SQL backend
|
||||
## For small servers SQLite is a good fit and is very easy
|
||||
## to configure. Uncomment this when you have SQL configured:
|
||||
## db_type: sql
|
||||
assume_mam_usage: true
|
||||
default: always
|
||||
mod_mqtt: {}
|
||||
mod_muc:
|
||||
access:
|
||||
- allow
|
||||
access_admin:
|
||||
- allow: admin
|
||||
access_create: muc_create
|
||||
access_persistent: muc_create
|
||||
access_mam:
|
||||
- allow
|
||||
default_room_options:
|
||||
mam: true
|
||||
mod_muc_admin: {}
|
||||
mod_offline:
|
||||
access_max_user_messages: max_user_offline_messages
|
||||
mod_ping: {}
|
||||
mod_privacy: {}
|
||||
mod_private: {}
|
||||
mod_proxy65:
|
||||
access: local
|
||||
max_connections: 5
|
||||
port: PORT_PROXY65
|
||||
mod_pubsub:
|
||||
access_createnode: pubsub_createnode
|
||||
plugins:
|
||||
- flat
|
||||
- pep
|
||||
force_node_config:
|
||||
## Avoid buggy clients to make their bookmarks public
|
||||
storage:bookmarks:
|
||||
access_model: whitelist
|
||||
mod_push: {}
|
||||
mod_push_keepalive: {}
|
||||
mod_register:
|
||||
## Only accept registration requests from the "trusted"
|
||||
## network (see access_rules section above).
|
||||
## Think twice before enabling registration from any
|
||||
## address. See the Jabber SPAM Manifesto for details:
|
||||
## https://github.com/ge0rg/jabber-spam-fighting-manifesto
|
||||
ip_access: trusted_network
|
||||
mod_roster:
|
||||
versioning: true
|
||||
mod_s2s_bidi: {}
|
||||
mod_s2s_dialback: {}
|
||||
mod_shared_roster: {}
|
||||
mod_stream_mgmt:
|
||||
resend_on_timeout: if_offline
|
||||
mod_stun_disco: {}
|
||||
mod_vcard: {}
|
||||
mod_vcard_xupdate: {}
|
||||
mod_version:
|
||||
show_os: false
|
||||
|
||||
### Local Variables:
|
||||
### mode: yaml
|
||||
### End:
|
||||
### vim: set filetype=yaml tabstop=8
|
322
.github/container/ejabberdctl.template
vendored
322
.github/container/ejabberdctl.template
vendored
|
@ -15,10 +15,10 @@ SCRIPT_DIR="$(cd "$(dirname "$SCRIPT")" && pwd -P)"
|
|||
# shellcheck disable=SC2034
|
||||
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
|
||||
IEX="{{iexpath}}"
|
||||
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
|
||||
|
@ -60,7 +60,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
|
||||
|
@ -69,16 +68,24 @@ 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"}"
|
||||
|
||||
# backward support for old mnesia spool dir path
|
||||
: "${SPOOL_DIR_OLD:="$SPOOL_DIR/$ERLANG_NODE"}"
|
||||
[ -r "$SPOOL_DIR_OLD/schema.DAT" ] && [ ! -r "$SPOOL_DIR/schema.DAT" ] && SPOOL_DIR="$SPOOL_DIR_OLD"
|
||||
|
||||
# define erl parameters
|
||||
ERLANG_OPTS="+K $POLL +P $ERL_PROCESSES $ERL_OPTIONS"
|
||||
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
|
||||
if [ "$(echo "$INET_DIST_INTERFACE2" | grep -o "," | wc -l)" -eq 7 ] ; then
|
||||
INET_DIST_INTERFACE2="$INET_DIST_INTERFACE2 -proto_dist inet6_tcp"
|
||||
fi
|
||||
ERLANG_OPTS="$ERLANG_OPTS -kernel inet_dist_use_interface $INET_DIST_INTERFACE2"
|
||||
fi
|
||||
fi
|
||||
|
@ -90,11 +97,12 @@ ERL_CRASH_DUMP="$LOGS_DIR"/erl_crash_$(date "+%Y%m%d-%H%M%S").dump
|
|||
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_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")"
|
||||
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_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")\
|
||||
$EJABBERD_OPTS"
|
||||
[ -n "$EJABBERD_OPTS" ] && EJABBERD_OPTS="-ejabberd $EJABBERD_OPTS"
|
||||
EJABBERD_OPTS="-mnesia dir \"$SPOOL_DIR\" $MNESIA_OPTIONS $EJABBERD_OPTS -s ejabberd"
|
||||
|
||||
|
@ -129,8 +137,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()
|
||||
|
@ -162,9 +170,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"
|
||||
|
@ -185,8 +195,10 @@ livewarning()
|
|||
echo "Please be extremely cautious with your actions,"
|
||||
echo "and exit immediately if you are not completely sure."
|
||||
echo ""
|
||||
echo "To exit this LIVE mode and stop ejabberd, press:"
|
||||
echo " q(). and press the Enter key"
|
||||
echo "To stop ejabberd gracefully:"
|
||||
echo " ejabberd:stop()."
|
||||
echo "To quit erlang immediately, press:"
|
||||
echo " control+g and then q"
|
||||
echo ""
|
||||
echo "--------------------------------------------------------------------"
|
||||
echo "To bypass permanently this warning, add to ejabberdctl.cfg the line:"
|
||||
|
@ -197,6 +209,39 @@ livewarning()
|
|||
fi
|
||||
}
|
||||
|
||||
check_etop_result()
|
||||
{
|
||||
result=$?
|
||||
if [ $result -eq 1 ] ; then
|
||||
echo ""
|
||||
echo "It seems there was some problem running 'ejabberdctl etop'."
|
||||
echo "Is the error message something like this?"
|
||||
echo " Failed to load module 'etop' because it cannot be found..."
|
||||
echo "Then probably ejabberd was compiled with development tools disabled."
|
||||
echo "To use 'etop', recompile ejabberd with: ./configure --enable-tools"
|
||||
echo ""
|
||||
exit $result
|
||||
fi
|
||||
}
|
||||
|
||||
check_iex_result()
|
||||
{
|
||||
result=$?
|
||||
if [ $result -eq 127 ] ; then
|
||||
echo ""
|
||||
echo "It seems there was some problem finding 'iex' binary from Elixir."
|
||||
echo "Probably ejabberd was compiled with Rebar3 and Elixir disabled, like:"
|
||||
echo " ./configure"
|
||||
echo "which is equivalent to:"
|
||||
echo " ./configure --with-rebar=rebar3 --disable-elixir"
|
||||
echo "To use 'iex', recompile ejabberd enabling Elixir or using Mix:"
|
||||
echo " ./configure --enable-elixir"
|
||||
echo " ./configure --with-rebar=mix"
|
||||
echo ""
|
||||
exit $result
|
||||
fi
|
||||
}
|
||||
|
||||
help()
|
||||
{
|
||||
echo ""
|
||||
|
@ -225,16 +270,34 @@ help()
|
|||
}
|
||||
|
||||
# dynamic node name helper
|
||||
uid()
|
||||
{
|
||||
uuid=$(uuidgen 2>/dev/null)
|
||||
random=$(awk 'BEGIN { srand(); print int(rand()*32768) }' /dev/null)
|
||||
[ -z "$uuid" ] && [ -f /proc/sys/kernel/random/uuid ] && uuid=$(cat /proc/sys/kernel/random/uuid)
|
||||
[ -z "$uuid" ] && uuid=$(printf "%X" "${random:-$$}$(date +%M%S)")
|
||||
uuid=$(printf '%s' $uuid | sed 's/^\(...\).*$/\1/')
|
||||
[ $# -eq 0 ] && echo "${uuid}-${ERLANG_NODE}"
|
||||
[ $# -eq 1 ] && echo "${uuid}-${1}-${ERLANG_NODE}"
|
||||
[ $# -eq 2 ] && echo "${uuid}-${1}@${2}"
|
||||
uid() {
|
||||
ERTSVERSION="$("$ERL" -version 2>&1 | sed 's|.* \([0-9]*[0-9]\).*|\1|g')"
|
||||
if [ $ERTSVERSION -lt 11 ] ; then # otp 23.0 includes erts 11.0
|
||||
# Erlang/OTP lower than 23, which doesn's support dynamic node code
|
||||
N=1
|
||||
PF=$(( $$ % 97 ))
|
||||
while
|
||||
case $# in
|
||||
0) NN="${PF}-${N}-${ERLANG_NODE}"
|
||||
;;
|
||||
1) NN="${PF}-${N}-${1}-${ERLANG_NODE}"
|
||||
;;
|
||||
2) NN="${PF}-${N}-${1}@${2}"
|
||||
;;
|
||||
esac
|
||||
N=$(( N + 1 + ( $$ % 5 ) ))
|
||||
"$EPMD" -names 2>/dev/null | grep -q " ${NN%@*} "
|
||||
do :; done
|
||||
echo $NN
|
||||
else
|
||||
# Erlang/OTP 23 or higher: use native dynamic node code
|
||||
# https://www.erlang.org/patches/otp-23.0#OTP-13812
|
||||
if [ "$ERLANG_NODE" != "${ERLANG_NODE%.*}" ]; then
|
||||
echo "undefined@${ERLANG_NODE#*@}"
|
||||
else
|
||||
echo "undefined"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# stop epmd if there is no other running node
|
||||
|
@ -248,6 +311,8 @@ stop_epmd()
|
|||
# if all ok, ensure runtime directory exists and make it current directory
|
||||
check_start()
|
||||
{
|
||||
ECSIMAGE_DBPATH=$HOME/database/$ERLANG_NODE
|
||||
[ ! -d "$ECSIMAGE_DBPATH" ] && ln -s $HOME/database $HOME/database/$ERLANG_NODE
|
||||
[ -n "$ERL_DIST_PORT" ] && return
|
||||
"$EPMD" -names 2>/dev/null | grep -q " ${ERLANG_NODE%@*} " && {
|
||||
pgrep -f "$ERLANG_NODE" >/dev/null && {
|
||||
|
@ -281,14 +346,32 @@ post_waiter_loop()
|
|||
LIST=$@
|
||||
HEAD=${LIST%% ; *}
|
||||
TAIL=${LIST#* ; }
|
||||
echo ":> ejabberdctl $HEAD"
|
||||
$0 $HEAD
|
||||
HEAD2=${HEAD#\! *}
|
||||
echo ":> ejabberdctl $HEAD2"
|
||||
$0 $HEAD2
|
||||
ctlstatus=$?
|
||||
if [ $ctlstatus -ne 0 ] ; then
|
||||
if [ "$HEAD" != "$HEAD2" ] ; then
|
||||
echo ":> FAILURE in command '$HEAD2' !!! Ignoring result"
|
||||
else
|
||||
echo ":> FAILURE in command '$HEAD' !!! Stopping ejabberd..."
|
||||
$0 halt > /dev/null
|
||||
exit $ctlstatus
|
||||
fi
|
||||
fi
|
||||
[ "$HEAD" = "$TAIL" ] || post_waiter_loop $TAIL
|
||||
}
|
||||
|
||||
# allow sync calls
|
||||
wait_status()
|
||||
{
|
||||
wait_status_node "$ERLANG_NODE" $1 $2 $3
|
||||
}
|
||||
|
||||
wait_status_node()
|
||||
{
|
||||
CONNECT_NODE=$1
|
||||
shift
|
||||
# args: status try delay
|
||||
# return: 0 OK, 1 KO
|
||||
timeout="$2"
|
||||
|
@ -299,14 +382,71 @@ wait_status()
|
|||
if [ $timeout -eq 0 ] ; then
|
||||
status="$1"
|
||||
else
|
||||
run_erl "$(uid ctl)" -hidden -noinput -s ejabberd_ctl \
|
||||
-extra "$ERLANG_NODE" $NO_TIMEOUT status > /dev/null
|
||||
run_erl "$(uid ctl)" -hidden -noinput \
|
||||
-eval 'net_kernel:connect_node('"'$CONNECT_NODE'"')' \
|
||||
-s ejabberd_ctl \
|
||||
-extra "$CONNECT_NODE" $NO_TIMEOUT status > /dev/null
|
||||
status="$?"
|
||||
fi
|
||||
done
|
||||
[ $timeout -gt 0 ]
|
||||
}
|
||||
|
||||
exec_other_command()
|
||||
{
|
||||
exec_other_command_node $ERLANG_NODE "$@"
|
||||
}
|
||||
|
||||
exec_other_command_node()
|
||||
{
|
||||
CONNECT_NODE=$1
|
||||
shift
|
||||
if [ -z "$CTL_OVER_HTTP" ] || [ ! -S "$CTL_OVER_HTTP" ] \
|
||||
|| [ ! -x "$(command -v curl)" ] || [ -z "$1" ] || [ "$1" = "help" ] \
|
||||
|| [ "$1" = "mnesia_info_ctl" ]|| [ "$1" = "print_sql_schema" ] ; then
|
||||
run_erl "$(uid ctl)" -hidden -noinput \
|
||||
-eval 'net_kernel:connect_node('"'$CONNECT_NODE'"')' \
|
||||
-s ejabberd_ctl \
|
||||
-extra "$CONNECT_NODE" $NO_TIMEOUT "$@"
|
||||
result=$?
|
||||
case $result in
|
||||
3) help;;
|
||||
*) :;;
|
||||
esac
|
||||
return $result
|
||||
else
|
||||
exec_ctl_over_http_socket "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
exec_ctl_over_http_socket()
|
||||
{
|
||||
COMMAND=${1}
|
||||
CARGS=""
|
||||
while [ $# -gt 0 ]; do
|
||||
[ -z "$CARGS" ] && CARGS="[" || CARGS="${CARGS}, "
|
||||
CARGS="${CARGS}\"$1\""
|
||||
shift
|
||||
done
|
||||
CARGS="${CARGS}]"
|
||||
TEMPHEADERS=temp-headers.log
|
||||
curl \
|
||||
--unix-socket ${CTL_OVER_HTTP} \
|
||||
--header "Content-Type: application/json" \
|
||||
--header "Accept: application/json" \
|
||||
--data "${CARGS}" \
|
||||
--dump-header ${TEMPHEADERS} \
|
||||
--no-progress-meter \
|
||||
"http://localhost/ctl/${COMMAND}"
|
||||
result=$(sed -n 's/.*status-code: \([0-9]*\).*/\1/p' < $TEMPHEADERS)
|
||||
rm ${TEMPHEADERS}
|
||||
case $result in
|
||||
2|3) exec_other_command help ${COMMAND};;
|
||||
*) :;;
|
||||
esac
|
||||
exit $result
|
||||
}
|
||||
|
||||
# ensure we can change current directory to SPOOL_DIR
|
||||
[ -f "$SPOOL_DIR/schema.DAT" ] || FIRST_RUN=true
|
||||
[ -d "$SPOOL_DIR" ] || run_cmd mkdir -p "$SPOOL_DIR"
|
||||
|
@ -315,6 +455,103 @@ cd "$SPOOL_DIR" || {
|
|||
exit 6
|
||||
}
|
||||
|
||||
printe()
|
||||
{
|
||||
printf "\n"
|
||||
printf "\e[1;40;32m==> %s\e[0m\n" "$1"
|
||||
}
|
||||
|
||||
## Function copied from tools/make-installers
|
||||
user_agrees()
|
||||
{
|
||||
question="$*"
|
||||
|
||||
if [ -t 0 ]
|
||||
then
|
||||
printe "$question (y/n) [n]"
|
||||
read -r response
|
||||
case "$response" in
|
||||
[Yy]|[Yy][Ee][Ss])
|
||||
return 0
|
||||
;;
|
||||
[Nn]|[Nn][Oo]|'')
|
||||
return 1
|
||||
;;
|
||||
*)
|
||||
echo 'Please respond with "yes" or "no".'
|
||||
user_agrees "$question"
|
||||
;;
|
||||
esac
|
||||
else # Assume 'yes' if not running interactively.
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
mnesia_change()
|
||||
{
|
||||
ERLANG_NODE_OLD="$1"
|
||||
[ "$ERLANG_NODE_OLD" = "" ] \
|
||||
&& echo "Error: Please provide the old erlang node name, for example:" \
|
||||
&& echo " ejabberdctl mnesia_change ejabberd@oldmachine" \
|
||||
&& exit 1
|
||||
|
||||
SPOOL_DIR_BACKUP=$SPOOL_DIR/$ERLANG_NODE_OLD-backup/
|
||||
OLDFILE=$SPOOL_DIR_BACKUP/$ERLANG_NODE_OLD.backup
|
||||
NEWFILE=$SPOOL_DIR_BACKUP/$ERLANG_NODE.backup
|
||||
|
||||
printe "This changes your mnesia database from node name '$ERLANG_NODE_OLD' to '$ERLANG_NODE'"
|
||||
|
||||
[ -d "$SPOOL_DIR_BACKUP" ] && printe "WARNING! A backup of old node already exists in $SPOOL_DIR_BACKUP"
|
||||
|
||||
if ! user_agrees "Do you want to proceed?"
|
||||
then
|
||||
echo 'Operation aborted.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
printe "Starting ejabberd with old node name $ERLANG_NODE_OLD ..."
|
||||
exec_erl "$ERLANG_NODE_OLD" $EJABBERD_OPTS -detached
|
||||
wait_status_node $ERLANG_NODE_OLD 0 30 2
|
||||
result=$?
|
||||
case $result in
|
||||
1) echo "There was a problem starting ejabberd with the old erlang node name. " \
|
||||
&& echo "Check for log errors in $EJABBERD_LOG_PATH" \
|
||||
&& exit $result;;
|
||||
*) :;;
|
||||
esac
|
||||
exec_other_command_node $ERLANG_NODE_OLD "status"
|
||||
|
||||
printe "Making backup of old database to file $OLDFILE ..."
|
||||
mkdir $SPOOL_DIR_BACKUP
|
||||
exec_other_command_node $ERLANG_NODE_OLD backup "$OLDFILE"
|
||||
|
||||
printe "Changing node name in new backup file $NEWFILE ..."
|
||||
exec_other_command_node $ERLANG_NODE_OLD mnesia_change_nodename "$ERLANG_NODE_OLD" "$ERLANG_NODE" "$OLDFILE" "$NEWFILE"
|
||||
|
||||
printe "Stopping old ejabberd..."
|
||||
exec_other_command_node $ERLANG_NODE_OLD "stop"
|
||||
wait_status_node $ERLANG_NODE_OLD 3 30 2 && stop_epmd
|
||||
|
||||
printe "Moving old mnesia spool files to backup subdirectory $SPOOL_DIR_BACKUP ..."
|
||||
mv $SPOOL_DIR/*.DAT $SPOOL_DIR_BACKUP
|
||||
mv $SPOOL_DIR/*.DCD $SPOOL_DIR_BACKUP
|
||||
mv $SPOOL_DIR/*.LOG $SPOOL_DIR_BACKUP
|
||||
|
||||
printe "Starting ejabberd with new node name $ERLANG_NODE ..."
|
||||
exec_erl "$ERLANG_NODE" $EJABBERD_OPTS -detached
|
||||
wait_status 0 30 2
|
||||
exec_other_command "status"
|
||||
|
||||
printe "Installing fallback of new mnesia..."
|
||||
exec_other_command install_fallback "$NEWFILE"
|
||||
|
||||
printe "Stopping new ejabberd..."
|
||||
exec_other_command "stop"
|
||||
wait_status 3 30 2 && stop_epmd
|
||||
|
||||
printe "Finished, now you can start ejabberd normally"
|
||||
}
|
||||
|
||||
# main
|
||||
case $1 in
|
||||
start)
|
||||
|
@ -342,24 +579,31 @@ case $1 in
|
|||
;;
|
||||
etop)
|
||||
set_dist_client
|
||||
exec_erl "$(uid top)" -hidden -node "$ERLANG_NODE" -s etop \
|
||||
-s erlang halt -output text
|
||||
exec_erl "$(uid top)" -hidden -remsh "$ERLANG_NODE" \
|
||||
-eval 'net_kernel:connect_node('"'$ERLANG_NODE'"')' \
|
||||
-s etop \
|
||||
-output text
|
||||
check_etop_result
|
||||
;;
|
||||
iexdebug)
|
||||
debugwarning
|
||||
set_dist_client
|
||||
exec_iex "$(uid debug)" --remsh "$ERLANG_NODE"
|
||||
check_iex_result
|
||||
;;
|
||||
iexlive)
|
||||
livewarning
|
||||
exec_iex "$ERLANG_NODE" --erl "$EJABBERD_OPTS" --app ejabberd
|
||||
exec_iex "$ERLANG_NODE" --erl "$EJABBERD_OPTS"
|
||||
check_iex_result
|
||||
;;
|
||||
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'"')])' \
|
||||
-noinput -hidden \
|
||||
-eval 'net_kernel:connect_node('"'$PEER'"')' \
|
||||
-eval 'io:format("~p~n",[net_adm:ping('"'$PEER'"')])' \
|
||||
-s erlang halt -output text
|
||||
;;
|
||||
started)
|
||||
|
@ -370,18 +614,14 @@ case $1 in
|
|||
set_dist_client
|
||||
wait_status 3 30 2 && stop_epmd # wait 30x2s before timeout
|
||||
;;
|
||||
mnesia_change)
|
||||
mnesia_change $2
|
||||
;;
|
||||
post_waiter)
|
||||
post_waiter_waiting
|
||||
;;
|
||||
*)
|
||||
set_dist_client
|
||||
run_erl "$(uid ctl)" -hidden -noinput -s ejabberd_ctl \
|
||||
-extra "$ERLANG_NODE" $NO_TIMEOUT "$@"
|
||||
result=$?
|
||||
case $result in
|
||||
2|3) help;;
|
||||
*) :;;
|
||||
esac
|
||||
exit $result
|
||||
exec_other_command "$@"
|
||||
;;
|
||||
esac
|
||||
|
|
229
.github/workflows/ci-19.3.yml
vendored
229
.github/workflows/ci-19.3.yml
vendored
|
@ -1,229 +0,0 @@
|
|||
name: CI (19.3)
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- '.devcontainer/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'man/**'
|
||||
- 'priv/**'
|
||||
- '**.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '.devcontainer/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'man/**'
|
||||
- 'priv/**'
|
||||
- '**.md'
|
||||
|
||||
jobs:
|
||||
|
||||
tests:
|
||||
name: Tests
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
otp: ['19.3']
|
||||
runs-on: ubuntu-18.04
|
||||
services:
|
||||
redis:
|
||||
image: redis
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Get specific Erlang/OTP
|
||||
uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{ matrix.otp }}
|
||||
|
||||
- name: Get a compatible Rebar3
|
||||
run: |
|
||||
rm rebar3
|
||||
wget https://github.com/processone/ejabberd/raw/21.12/rebar3
|
||||
chmod +x rebar3
|
||||
|
||||
- name: Prepare databases
|
||||
run: |
|
||||
sudo systemctl start mysql.service
|
||||
sudo systemctl start postgresql.service
|
||||
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
|
||||
pg_isready
|
||||
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;"
|
||||
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;"
|
||||
|
||||
- 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: |
|
||||
~/.cache/rebar3/
|
||||
key: ${{matrix.otp}}-${{hashFiles('rebar.config')}}
|
||||
|
||||
- name: Compile
|
||||
run: |
|
||||
./autogen.sh
|
||||
./configure --with-rebar=./rebar3 \
|
||||
--prefix=/tmp/ejabberd \
|
||||
--enable-all \
|
||||
--disable-elixir \
|
||||
--disable-mssql \
|
||||
--disable-odbc
|
||||
make update
|
||||
make
|
||||
|
||||
- run: make install -s
|
||||
- run: make hooks
|
||||
- run: make options
|
||||
- run: make xref
|
||||
- run: make dialyzer
|
||||
|
||||
- name: Check Production Release
|
||||
run: |
|
||||
make rel
|
||||
RE=_build/prod/rel/ejabberd
|
||||
$RE/bin/ejabberdctl start
|
||||
$RE/bin/ejabberdctl started
|
||||
$RE/bin/ejabberdctl stop
|
||||
$RE/bin/ejabberdctl stopped
|
||||
cat $RE/logs/ejabberd.log
|
||||
grep -q "is stopped in" $RE/logs/ejabberd.log
|
||||
|
||||
- name: Check Development Release
|
||||
run: |
|
||||
make dev
|
||||
RE=_build/dev/rel/ejabberd
|
||||
$RE/bin/ejabberdctl start
|
||||
$RE/bin/ejabberdctl started
|
||||
$RE/bin/ejabberdctl stop
|
||||
$RE/bin/ejabberdctl stopped
|
||||
cat $RE/logs/ejabberd.log
|
||||
grep -q "is stopped in" $RE/logs/ejabberd.log
|
||||
|
||||
- name: Run tests
|
||||
id: ct
|
||||
run: |
|
||||
(cd priv && ln -sf ../sql)
|
||||
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
|
||||
|
||||
- name: Check results
|
||||
if: always() && (steps.ct.outcome != 'skipped' || steps.ct2.outcome != 'skipped')
|
||||
id: ctresults
|
||||
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.ctresults.outcome == 'failure'
|
||||
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: Upload test logs
|
||||
if: always() && steps.ct.outcome == 'failure' && github.repository == 'processone/ejabberd'
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
publish_dir: _build/test
|
||||
exclude_assets: '.github,lib,plugins'
|
||||
external_repository: processone/ecil
|
||||
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
||||
keep_files: true
|
||||
|
||||
- name: View ECIL address
|
||||
if: always() && steps.ct.outcome == 'failure' && github.repository == 'processone/ejabberd'
|
||||
run: |
|
||||
CTRUN=`ls -la _build/test/logs/last | sed 's|.*-> ||'`
|
||||
echo "::notice::View CT results: https://processone.github.io/ecil/logs/$CTRUN/"
|
||||
|
||||
- name: Prepare new schema
|
||||
run: |
|
||||
[[ -d logs ]] && rm -rf logs
|
||||
[[ -d _build/test/logs ]] && rm -rf _build/test/logs || true
|
||||
mysql -u root -proot -e "DROP DATABASE ejabberd_test;"
|
||||
sudo -u postgres psql -c "DROP DATABASE 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.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;"
|
||||
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;"
|
||||
sed -i 's|new_schema, false|new_schema, true|g' test/suite.erl
|
||||
- run: CT_BACKENDS=mysql,pgsql make test
|
||||
id: ctnewschema
|
||||
- name: Check results
|
||||
if: always() && steps.ctnewschema.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.ctnewschema.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 '{}' ';'
|
158
.github/workflows/ci.yml
vendored
158
.github/workflows/ci.yml
vendored
|
@ -25,20 +25,20 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
otp: ['20.0', '21.3', '24.3', '25']
|
||||
runs-on: ubuntu-20.04
|
||||
otp: ['25', '26', '27', '28']
|
||||
runs-on: ubuntu-24.04
|
||||
services:
|
||||
redis:
|
||||
image: redis
|
||||
image: public.ecr.aws/docker/library/redis
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Test shell scripts
|
||||
if: matrix.otp == 25
|
||||
if: matrix.otp == '27'
|
||||
run: |
|
||||
shellcheck test/ejabberd_SUITE_data/gencerts.sh
|
||||
shellcheck tools/captcha.sh
|
||||
|
@ -46,35 +46,38 @@ jobs:
|
|||
shellcheck -x ejabberdctl.template
|
||||
|
||||
- name: Get specific Erlang/OTP
|
||||
if: matrix.otp != 25
|
||||
uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{ matrix.otp }}
|
||||
|
||||
- name: Get a compatible Rebar3
|
||||
if: matrix.otp <= '21.3'
|
||||
- name: Install MS SQL Server
|
||||
run: |
|
||||
rm rebar3
|
||||
wget https://github.com/processone/ejabberd/raw/21.12/rebar3
|
||||
chmod +x rebar3
|
||||
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-tools18/bin/sqlcmd -C -U SA -P ejabberd_Test1 -S localhost -i /initdb_mssql.sql
|
||||
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd -C -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
|
||||
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;"
|
||||
sudo -u postgres psql -c "GRANT ALL ON SCHEMA public TO ejabberd_test;"
|
||||
sudo -u postgres psql -c "ALTER DATABASE ejabberd_test OWNER TO ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
TABLES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
|
@ -89,39 +92,16 @@ jobs:
|
|||
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
|
||||
- name: Cache Hex.pm
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.cache/rebar3/
|
||||
key: ${{matrix.otp}}-${{hashFiles('rebar.config')}}
|
||||
|
||||
- name: Download test logs
|
||||
if: matrix.otp == 25 && github.repository == 'processone/ejabberd'
|
||||
continue-on-error: true
|
||||
run: |
|
||||
mkdir -p _build/test
|
||||
curl -sSL https://github.com/processone/ecil/tarball/gh-pages |
|
||||
tar -C _build/test --strip-components=1 --wildcards -xzf -
|
||||
rm -rf _build/test/logs/last/
|
||||
|
||||
- name: Compile
|
||||
run: |
|
||||
./autogen.sh
|
||||
|
@ -131,7 +111,6 @@ jobs:
|
|||
--disable-elixir \
|
||||
--disable-mssql \
|
||||
--disable-odbc
|
||||
make update
|
||||
make
|
||||
|
||||
- run: make install -s
|
||||
|
@ -139,6 +118,9 @@ jobs:
|
|||
- run: make options
|
||||
- run: make xref
|
||||
- run: make dialyzer
|
||||
- run: make test-eunit
|
||||
- run: make elvis
|
||||
if: matrix.otp >= '26'
|
||||
|
||||
- name: Check Production Release
|
||||
run: |
|
||||
|
@ -151,12 +133,30 @@ jobs:
|
|||
cat $RE/logs/ejabberd.log
|
||||
grep -q "is stopped in" $RE/logs/ejabberd.log
|
||||
|
||||
- name: Check Development Release
|
||||
- name: Start Development Release
|
||||
run: |
|
||||
make dev
|
||||
RE=_build/dev/rel/ejabberd
|
||||
sed -i 's/starttls_required: true/starttls_required: false/g' $RE/conf/ejabberd.yml
|
||||
$RE/bin/ejabberdctl start
|
||||
$RE/bin/ejabberdctl started
|
||||
$RE/bin/ejabberdctl register admin localhost admin
|
||||
grep -q "is started in" $RE/logs/ejabberd.log
|
||||
|
||||
- name: Run XMPP Interoperability Tests against CI server.
|
||||
if: matrix.otp == '27'
|
||||
continue-on-error: true
|
||||
uses: XMPP-Interop-Testing/xmpp-interop-tests-action@v1.6.1
|
||||
with:
|
||||
domain: 'localhost'
|
||||
adminAccountUsername: 'admin'
|
||||
adminAccountPassword: 'admin'
|
||||
disabledSpecifications: RFC6121,XEP-0030,XEP-0045,XEP-0054,XEP-0060,XEP-0080,XEP-0115,XEP-0118,XEP-0215,XEP-0347,XEP-0363,XEP-0384
|
||||
|
||||
- name: Stop Development Release
|
||||
if: always()
|
||||
run: |
|
||||
RE=_build/dev/rel/ejabberd
|
||||
$RE/bin/ejabberdctl stop
|
||||
$RE/bin/ejabberdctl stopped
|
||||
cat $RE/logs/ejabberd.log
|
||||
|
@ -166,6 +166,7 @@ jobs:
|
|||
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 "/" "_"`
|
||||
|
@ -175,7 +176,7 @@ jobs:
|
|||
./rebar3 cover
|
||||
|
||||
- name: Check results
|
||||
if: always() && (steps.ct.outcome != 'skipped' || steps.ct2.outcome != 'skipped')
|
||||
if: always() && (steps.ct.outcome != 'skipped')
|
||||
id: ctresults
|
||||
run: |
|
||||
[[ -d _build ]] && ln -s _build/test/logs/last/ logs || true
|
||||
|
@ -193,7 +194,7 @@ jobs:
|
|||
find logs/ -name exunit.log -exec cat '{}' ';'
|
||||
|
||||
- name: Send to coveralls
|
||||
if: matrix.otp == 25
|
||||
if: matrix.otp == '27'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
|
@ -205,36 +206,60 @@ jobs:
|
|||
"payload":{"build_num":$GITHUB_RUN_ID,
|
||||
"status":"done"}}'
|
||||
|
||||
- name: Upload test logs
|
||||
if: always() && steps.ct.outcome == 'failure' && github.repository == 'processone/ejabberd'
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
- name: Check for changes to trigger schema upgrade test
|
||||
uses: dorny/paths-filter@v3
|
||||
id: filter
|
||||
with:
|
||||
publish_dir: _build/test
|
||||
exclude_assets: '.github,lib,plugins'
|
||||
external_repository: processone/ecil
|
||||
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
||||
keep_files: true
|
||||
filters: |
|
||||
sql:
|
||||
- 'sql/**'
|
||||
- 'src/mod_admin_update_sql.erl'
|
||||
|
||||
- name: View ECIL address
|
||||
if: always() && steps.ct.outcome == 'failure' && github.repository == 'processone/ejabberd'
|
||||
- name: Prepare for schema upgrade test
|
||||
id: prepupgradetest
|
||||
if: ${{ steps.filter.outputs.sql == 'true' }}
|
||||
run: |
|
||||
CTRUN=`ls -la _build/test/logs/last | sed 's|.*-> ||'`
|
||||
echo "::notice::View CT results: https://processone.github.io/ecil/logs/$CTRUN/"
|
||||
[[ -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-tools18/bin/sqlcmd -C -U SA -P ejabberd_Test1 -S localhost -Q "drop database [ejabberd_test];"
|
||||
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd -C -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-tools18/bin/sqlcmd -C -U SA -P ejabberd_Test1 -S localhost -i /initdb_mssql.sql
|
||||
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd -C -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
|
||||
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;"
|
||||
sudo -u postgres psql -c "GRANT ALL ON SCHEMA public TO ejabberd_test;"
|
||||
sudo -u postgres psql -c "ALTER DATABASE ejabberd_test OWNER TO ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
TABLES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
|
@ -242,7 +267,8 @@ jobs:
|
|||
SEQUENCES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
sed -i 's|new_schema, false|new_schema, true|g' test/suite.erl
|
||||
- run: CT_BACKENDS=mysql,pgsql make test
|
||||
- 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'
|
||||
|
@ -259,3 +285,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@v4
|
||||
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
|
||||
|
|
17
.github/workflows/container.yml
vendored
17
.github/workflows/container.yml
vendored
|
@ -17,24 +17,23 @@ env:
|
|||
jobs:
|
||||
container:
|
||||
name: Container
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-22.04
|
||||
permissions:
|
||||
packages: write
|
||||
steps:
|
||||
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Checkout ejabberd-contrib
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: processone/ejabberd-contrib
|
||||
path: .ejabberd-modules/sources/ejabberd-contrib
|
||||
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@v2
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
|
@ -46,7 +45,7 @@ jobs:
|
|||
|
||||
- name: Extract metadata (tags, labels) for Docker
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
labels: |
|
||||
|
@ -55,13 +54,13 @@ jobs:
|
|||
org.opencontainers.image.vendor=ProcessOne
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v3
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
build-args: |
|
||||
VERSION=${{ steps.gitdescribe.outputs.ver }}
|
||||
|
|
16
.github/workflows/installers.yml
vendored
16
.github/workflows/installers.yml
vendored
|
@ -21,13 +21,13 @@ on:
|
|||
jobs:
|
||||
binaries:
|
||||
name: Binaries
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Cache build directory
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/build/
|
||||
key: ${{runner.os}}-ct-ng-1.25.0
|
||||
key: ${{runner.os}}-ct-ng-1.27.0
|
||||
- name: Install prerequisites
|
||||
run: |
|
||||
sudo apt-get -qq update
|
||||
|
@ -41,7 +41,7 @@ jobs:
|
|||
gem install --no-document --user-install fpm
|
||||
echo $HOME/.local/share/gem/ruby/*/bin >> $GITHUB_PATH
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Build binary archives
|
||||
|
@ -55,7 +55,7 @@ jobs:
|
|||
mkdir ejabberd-packages
|
||||
mv ejabberd_*.deb ejabberd-*.rpm ejabberd-*.run ejabberd-packages
|
||||
- name: Upload packages
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ejabberd-packages
|
||||
#
|
||||
|
@ -70,15 +70,15 @@ jobs:
|
|||
release:
|
||||
name: Release
|
||||
needs: [binaries]
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-22.04
|
||||
if: github.ref_type == 'tag'
|
||||
steps:
|
||||
- name: Download packages
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v5
|
||||
with:
|
||||
name: ejabberd-packages
|
||||
- name: Draft Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
draft: true
|
||||
files: ejabberd-packages/*
|
||||
|
|
368
.github/workflows/runtime.yml
vendored
368
.github/workflows/runtime.yml
vendored
|
@ -31,136 +31,197 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
otp: ['19.3', '20.3', '24.3', '25']
|
||||
otp: ['24', '25', '26', '27', '28']
|
||||
rebar: ['rebar', 'rebar3']
|
||||
runs-on: ubuntu-latest
|
||||
exclude:
|
||||
- otp: '24'
|
||||
rebar: 'rebar'
|
||||
- otp: '27'
|
||||
rebar: 'rebar'
|
||||
- otp: '28'
|
||||
rebar: 'rebar'
|
||||
runs-on: ubuntu-24.04
|
||||
container:
|
||||
image: erlang:${{ matrix.otp }}
|
||||
image: public.ecr.aws/docker/library/erlang:${{ matrix.otp }}
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Get old compatible Rebar binaries
|
||||
if: matrix.otp < 24
|
||||
run: |
|
||||
rm rebar
|
||||
rm rebar3
|
||||
wget https://github.com/processone/ejabberd/raw/21.12/rebar
|
||||
wget https://github.com/processone/ejabberd/raw/21.12/rebar3
|
||||
chmod +x rebar
|
||||
chmod +x rebar3
|
||||
|
||||
- name: Get recent compatible Rebar binaries
|
||||
if: matrix.otp > 23 && matrix.otp < 25
|
||||
run: |
|
||||
rm rebar
|
||||
rm rebar3
|
||||
wget https://github.com/processone/ejabberd/raw/24.12/rebar
|
||||
wget https://github.com/processone/ejabberd/raw/24.12/rebar3
|
||||
chmod +x rebar
|
||||
chmod +x rebar3
|
||||
|
||||
- name: Prepare libraries
|
||||
run: |
|
||||
apt-get -qq update
|
||||
apt-get purge -y libgd3
|
||||
apt-get purge -y libgd3 nginx
|
||||
apt-get -qq install libexpat1-dev libgd-dev libpam0g-dev \
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
|
||||
- name: Cache Hex.pm
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.cache/rebar3/
|
||||
key: ${{matrix.otp}}-${{hashFiles('rebar.config')}}
|
||||
|
||||
- name: Unlock eredis dependency
|
||||
if: matrix.rebar == 'rebar3' && matrix.otp < 21
|
||||
run: rebar3 unlock eredis
|
||||
|
||||
- name: Compile
|
||||
run: |
|
||||
./autogen.sh
|
||||
./configure --with-rebar=`which ${{ matrix.rebar }}` \
|
||||
./configure --with-rebar=./${{ matrix.rebar }} \
|
||||
--prefix=/tmp/ejabberd \
|
||||
--with-min-erlang=9.0.5 \
|
||||
--enable-all \
|
||||
--disable-elixir \
|
||||
--disable-tools \
|
||||
--disable-odbc
|
||||
make update
|
||||
make
|
||||
|
||||
- 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
|
||||
|
||||
- run: make xref
|
||||
|
||||
- name: Test rel (rebar2)
|
||||
- run: make dialyzer
|
||||
|
||||
- name: Prepare rel (rebar2)
|
||||
if: matrix.rebar == 'rebar'
|
||||
run: |
|
||||
make rel
|
||||
rel/ejabberd/bin/ejabberdctl start \
|
||||
&& rel/ejabberd/bin/ejabberdctl started
|
||||
rel/ejabberd/bin/ejabberdctl register user1 localhost s0mePass
|
||||
rel/ejabberd/bin/ejabberdctl registered_users localhost
|
||||
cat rel/ejabberd/logs/*
|
||||
mkdir -p _build/prod && ln -s `pwd`/rel/ _build/prod/rel
|
||||
mkdir -p _build/dev && ln -s `pwd`/rel/ _build/dev/rel
|
||||
|
||||
- name: Test rel
|
||||
if: matrix.rebar != 'rebar'
|
||||
- name: Run 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 registered_users localhost > registered.log
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl stop \
|
||||
&& _build/prod/rel/ejabberd/bin/ejabberdctl stopped
|
||||
cat _build/prod/rel/ejabberd/logs/*
|
||||
|
||||
- name: Test dev
|
||||
if: matrix.rebar != 'rebar'
|
||||
- name: Run 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 register user2 localhost s0mePass
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl registered_users localhost >> registered.log
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl stop \
|
||||
&& _build/dev/rel/ejabberd/bin/ejabberdctl stopped
|
||||
cat _build/dev/rel/ejabberd/logs/*
|
||||
|
||||
mix:
|
||||
name: Mix
|
||||
- name: Run install
|
||||
run: |
|
||||
make install
|
||||
/tmp/ejabberd/sbin/ejabberdctl start \
|
||||
&& /tmp/ejabberd/sbin/ejabberdctl started
|
||||
/tmp/ejabberd/sbin/ejabberdctl register user3 localhost s0mePass
|
||||
/tmp/ejabberd/sbin/ejabberdctl registered_users localhost >> registered.log
|
||||
/tmp/ejabberd/sbin/ejabberdctl stop \
|
||||
&& /tmp/ejabberd/sbin/ejabberdctl stopped
|
||||
|
||||
- name: View logs
|
||||
run: |
|
||||
echo "===> Registered:"
|
||||
cat registered.log
|
||||
echo "===> Prod:"
|
||||
cat _build/prod/rel/ejabberd/logs/*
|
||||
echo "===> Dev:"
|
||||
cat _build/dev/rel/ejabberd/logs/*
|
||||
echo "===> Install:"
|
||||
cat /tmp/ejabberd/var/log/ejabberd/*
|
||||
|
||||
- name: Check logs
|
||||
run: |
|
||||
grep -q '^user1$' registered.log
|
||||
grep -q '^user2$' registered.log
|
||||
grep -q '^user3$' registered.log
|
||||
grep -q 'is started' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'is stopped' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
test $(find _build/prod/rel/ -empty -name error.log)
|
||||
grep -q 'is started' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'is stopped' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
test $(find _build/dev/rel/ -empty -name error.log)
|
||||
grep -q 'is started' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
grep -q 'is stopped' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
test $(find /tmp/ejabberd/var/log/ejabberd/ -empty -name error.log)
|
||||
|
||||
- name: View logs failures
|
||||
if: always()
|
||||
run: |
|
||||
cat _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
cat _build/prod/rel/ejabberd/logs/error.log
|
||||
cat _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
cat _build/dev/rel/ejabberd/logs/error.log
|
||||
cat /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
cat /tmp/ejabberd/var/log/ejabberd/error.log
|
||||
|
||||
rebar3-elixir:
|
||||
name: Rebar3+Elixir
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
otp: ['21.3', '22.0', '25.0']
|
||||
elixir: ['1.10.3', '1.11.4', '1.12.3', '1.13.0', '1.14.0']
|
||||
exclude:
|
||||
- otp: '21.3'
|
||||
elixir: '1.12.3'
|
||||
- otp: '21.3'
|
||||
elixir: '1.13.0'
|
||||
- otp: '21.3'
|
||||
elixir: '1.14.0'
|
||||
- otp: '22.0'
|
||||
elixir: '1.14.0'
|
||||
- otp: '25.0'
|
||||
elixir: '1.10.3'
|
||||
- otp: '25.0'
|
||||
elixir: '1.11.4'
|
||||
- otp: '25.0'
|
||||
elixir: '1.12.3'
|
||||
runs-on: ubuntu-20.04
|
||||
elixir: ['1.14', '1.15', '1.16', '1.17', '1.18']
|
||||
runs-on: ubuntu-24.04
|
||||
container:
|
||||
image: public.ecr.aws/docker/library/elixir:${{ matrix.elixir }}
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Get specific Erlang/OTP
|
||||
uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{matrix.otp}}
|
||||
elixir-version: ${{matrix.elixir}}
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- 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 \
|
||||
apt-get -qq update
|
||||
apt-get -y purge libgd3 nginx
|
||||
apt-get -qq install libexpat1-dev libgd-dev libpam0g-dev \
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
|
||||
- name: Remove Elixir Matchers
|
||||
- name: Enable Module.Example and an Elixir dependency
|
||||
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::"
|
||||
sed -i "s|^modules:|modules:\n 'Ejabberd.Module.Example': {}|g" ejabberd.yml.example
|
||||
cat ejabberd.yml.example
|
||||
sed -i 's|^{deps, \[\(.*\)|{deps, [{decimal, ".*", {git, "https://github.com/ericmj/decimal", {branch, "main"}}},\n \1|g' rebar.config
|
||||
cat rebar.config
|
||||
|
||||
- name: Cache Hex.pm
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.cache/rebar3/
|
||||
key: ${{matrix.elixir}}-${{hashFiles('rebar.config')}}
|
||||
|
||||
- name: Install Hex and Rebar3 manually on older Elixir
|
||||
if: matrix.elixir <= '1.14'
|
||||
run: |
|
||||
mix local.hex --force
|
||||
mix local.rebar --force
|
||||
|
||||
- name: Compile
|
||||
run: |
|
||||
./autogen.sh
|
||||
./configure --with-rebar=mix \
|
||||
./configure --with-rebar=./rebar3 \
|
||||
--prefix=/tmp/ejabberd \
|
||||
--enable-all \
|
||||
--disable-elixir \
|
||||
--disable-odbc
|
||||
mix deps.get
|
||||
make
|
||||
|
||||
- run: make xref
|
||||
|
@ -185,17 +246,46 @@ jobs:
|
|||
_build/dev/rel/ejabberd/bin/ejabberdctl stop \
|
||||
&& _build/dev/rel/ejabberd/bin/ejabberdctl stopped
|
||||
|
||||
- name: Check rel
|
||||
- name: Run install
|
||||
run: |
|
||||
make install
|
||||
/tmp/ejabberd/sbin/ejabberdctl start \
|
||||
&& /tmp/ejabberd/sbin/ejabberdctl started
|
||||
/tmp/ejabberd/sbin/ejabberdctl register user3 localhost s0mePass
|
||||
/tmp/ejabberd/sbin/ejabberdctl registered_users localhost >> registered.log
|
||||
/tmp/ejabberd/sbin/ejabberdctl stop \
|
||||
&& /tmp/ejabberd/sbin/ejabberdctl stopped
|
||||
|
||||
- name: View logs
|
||||
if: always()
|
||||
run: |
|
||||
echo "===> Registered:"
|
||||
cat registered.log
|
||||
echo "===> Prod:"
|
||||
cat _build/prod/rel/ejabberd/logs/*
|
||||
echo "===> Dev:"
|
||||
cat _build/dev/rel/ejabberd/logs/*
|
||||
echo "===> Install:"
|
||||
cat /tmp/ejabberd/var/log/ejabberd/*
|
||||
|
||||
- name: Check logs
|
||||
if: always()
|
||||
run: |
|
||||
grep -q '^user1$' registered.log
|
||||
grep -q '^user2$' registered.log
|
||||
grep -q '^user3$' registered.log
|
||||
grep -q 'is started' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'is stopped' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'Stopping Ejabberd.Module.Example' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
test $(find _build/prod/ -empty -name error.log)
|
||||
grep -q 'is started' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'is stopped' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'Stopping Ejabberd.Module.Example' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
test $(find _build/dev/ -empty -name error.log)
|
||||
grep -q 'is started' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
grep -q 'is stopped' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
grep -q 'Stopping Ejabberd.Module.Example' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
test $(find /tmp/ejabberd/var/log/ejabberd/ -empty -name error.log)
|
||||
|
||||
- name: View logs failures
|
||||
if: failure()
|
||||
|
@ -204,3 +294,139 @@ 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
|
||||
cat /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
cat /tmp/ejabberd/var/log/ejabberd/error.log
|
||||
|
||||
mix:
|
||||
name: Mix
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
elixir: ['1.14', '1.15', '1.16', '1.17', '1.18']
|
||||
runs-on: ubuntu-24.04
|
||||
container:
|
||||
image: public.ecr.aws/docker/library/elixir:${{ matrix.elixir }}
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Prepare libraries
|
||||
run: |
|
||||
apt-get -qq update
|
||||
apt-get -y purge libgd3 nginx
|
||||
apt-get -qq install libexpat1-dev libgd-dev libpam0g-dev \
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
|
||||
- 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: Enable Module.Example and an Elixir dependency
|
||||
run: |
|
||||
sed -i "s|^modules:|modules:\n 'Ejabberd.Module.Example': {}|g" ejabberd.yml.example
|
||||
cat ejabberd.yml.example
|
||||
sed -i 's|^{deps, \(.*\)|{deps, \1\n {decimal, ".*", {git, "https://github.com/ericmj/decimal", {branch, "main"}}}, |g' rebar.config
|
||||
cat rebar.config
|
||||
|
||||
- name: Cache Hex.pm
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.hex/
|
||||
key: ${{matrix.elixir}}-${{hashFiles('mix.exs')}}
|
||||
|
||||
- name: Install Hex and Rebar3 manually on older Elixir
|
||||
if: matrix.elixir <= '1.14'
|
||||
run: |
|
||||
mix local.hex --force
|
||||
mix local.rebar --force
|
||||
|
||||
- name: Compile
|
||||
run: |
|
||||
./autogen.sh
|
||||
./configure --with-rebar=mix \
|
||||
--prefix=/tmp/ejabberd \
|
||||
--enable-all
|
||||
make
|
||||
|
||||
- run: make xref
|
||||
|
||||
- run: make dialyzer
|
||||
|
||||
- run: make edoc
|
||||
|
||||
- name: Run 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 > registered.log
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl stop \
|
||||
&& _build/prod/rel/ejabberd/bin/ejabberdctl stopped
|
||||
|
||||
- name: Run 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 user2 localhost s0mePass
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl registered_users localhost >> registered.log
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl stop \
|
||||
&& _build/dev/rel/ejabberd/bin/ejabberdctl stopped
|
||||
|
||||
- name: Run install
|
||||
run: |
|
||||
make install
|
||||
/tmp/ejabberd/sbin/ejabberdctl start \
|
||||
&& /tmp/ejabberd/sbin/ejabberdctl started
|
||||
/tmp/ejabberd/sbin/ejabberdctl register user3 localhost s0mePass
|
||||
/tmp/ejabberd/sbin/ejabberdctl registered_users localhost >> registered.log
|
||||
/tmp/ejabberd/sbin/ejabberdctl stop \
|
||||
&& /tmp/ejabberd/sbin/ejabberdctl stopped
|
||||
|
||||
- name: View logs
|
||||
if: always()
|
||||
run: |
|
||||
echo "===> Registered:"
|
||||
cat registered.log
|
||||
echo "===> Prod:"
|
||||
cat _build/prod/rel/ejabberd/logs/*
|
||||
echo "===> Dev:"
|
||||
cat _build/dev/rel/ejabberd/logs/*
|
||||
echo "===> Install:"
|
||||
cat /tmp/ejabberd/var/log/ejabberd/*
|
||||
|
||||
- name: Check logs
|
||||
if: always()
|
||||
run: |
|
||||
grep -q '^user1$' registered.log
|
||||
grep -q '^user2$' registered.log
|
||||
grep -q '^user3$' registered.log
|
||||
grep -q 'is started' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'is stopped' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'Stopping Ejabberd.Module.Example' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
test $(find _build/prod/ -empty -name error.log)
|
||||
grep -q 'is started' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'is stopped' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'Stopping Ejabberd.Module.Example' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
test $(find _build/dev/ -empty -name error.log)
|
||||
grep -q 'is started' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
grep -q 'is stopped' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
grep -q 'Stopping Ejabberd.Module.Example' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
test $(find /tmp/ejabberd/var/log/ejabberd/ -empty -name error.log)
|
||||
|
||||
- name: View logs failures
|
||||
if: failure()
|
||||
run: |
|
||||
cat _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
cat _build/prod/rel/ejabberd/logs/error.log
|
||||
cat _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
cat _build/dev/rel/ejabberd/logs/error.log
|
||||
cat /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
cat /tmp/ejabberd/var/log/ejabberd/error.log
|
||||
|
|
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -5,6 +5,7 @@
|
|||
\#*#
|
||||
.#*
|
||||
.edts
|
||||
.tool-versions
|
||||
*.dump
|
||||
/Makefile
|
||||
/doc
|
||||
|
@ -33,12 +34,14 @@
|
|||
/priv/bin/captcha*sh
|
||||
/priv/sql
|
||||
/rel/ejabberd
|
||||
/recompile.log
|
||||
/_build
|
||||
/database/
|
||||
/.rebar
|
||||
/rebar.lock
|
||||
/log/
|
||||
Mnesia.nonode@nohost/
|
||||
/TAGS
|
||||
/tags
|
||||
# Binaries created with tools/make-{binaries,installers,packages}:
|
||||
/ejabberd_*.deb
|
||||
/ejabberd-*.rpm
|
||||
|
|
19
.vscode/launch.json
vendored
19
.vscode/launch.json
vendored
|
@ -2,7 +2,24 @@
|
|||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Relive",
|
||||
"name": "Relive (Vim)",
|
||||
"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": 900,
|
||||
"cwd": "."
|
||||
},
|
||||
{
|
||||
"name": "Relive (VSCode)",
|
||||
"type": "erlang",
|
||||
"request": "launch",
|
||||
"runinterminal": [
|
||||
|
|
4
.vscode/relive.sh
vendored
4
.vscode/relive.sh
vendored
|
@ -1,6 +1,6 @@
|
|||
[ ! -f Makefile ] \
|
||||
&& ./autogen.sh \
|
||||
&& ./configure --with-rebar=./rebar3 \
|
||||
&& make deps
|
||||
&& ./configure --with-rebar=rebar3 \
|
||||
&& make
|
||||
|
||||
make relive
|
||||
|
|
1072
CHANGELOG.md
1072
CHANGELOG.md
File diff suppressed because it is too large
Load diff
|
@ -22,6 +22,21 @@ Examples of unacceptable behavior by participants include:
|
|||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Guidelines for Respectful and Efficient Communication on Issues, Discussions, and PRs
|
||||
|
||||
To ensure that our maintainers can efficiently manage issues and provide timely updates, we kindly ask that all comments on GitHub tickets remain relevant to the topic of the issue. Please avoid posting comments solely to ping maintainers or ask for updates. If you need information on the status of an issue, consider the following:
|
||||
|
||||
- **Check the Issue Timeline:** Review the existing comments and updates on the issue before posting.
|
||||
- **Use Reactions:** If you want to show that you are interested in an issue, use GitHub's reaction feature (e.g., thumbs up) instead of commenting.
|
||||
- **Be Patient:** Understand that maintainers may be working on multiple tasks and will provide updates as soon as possible.
|
||||
|
||||
Additionally, please be aware that:
|
||||
|
||||
- **User Responses:** Users who report issues may no longer be using the software, may have switched to other projects, or may simply be busy. It is their right not to respond to follow-up questions or comments.
|
||||
- **Maintainer Priorities:** Maintainers have the right to define their own priorities and schedule. They will address issues based on their availability and the project's needs.
|
||||
|
||||
By following these guidelines, you help us maintain a productive and respectful environment for everyone involved.
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
|
@ -34,13 +49,13 @@ 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.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
[homepage]: https://www.contributor-covenant.org/
|
||||
[version]: https://www.contributor-covenant.org/version/1/4/
|
||||
|
|
38
COMPILE.md
38
COMPILE.md
|
@ -7,7 +7,7 @@ from source code.
|
|||
For a more detailed explanation, please check the
|
||||
ejabberd Docs: [Source Code Installation][docs-source].
|
||||
|
||||
[docs-source]: https://docs.ejabberd.im/admin/installation/#source-code
|
||||
[docs-source]: https://docs.ejabberd.im/admin/install/source/
|
||||
|
||||
|
||||
Requirements
|
||||
|
@ -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 ≥ 25.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
|
||||
- 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
|
||||
- Elixir ≥ 1.10.3, for Elixir support. It is recommended Elixir 1.14.0 or higher
|
||||
|
||||
If your system splits packages in libraries and development headers,
|
||||
install the development packages too.
|
||||
|
@ -43,7 +43,7 @@ There are several ways to obtain the ejabberd source code:
|
|||
- Source code package from [ejabberd GitHub Releases][ghr]
|
||||
- Latest development code from [ejabberd Git repository][gitrepo]
|
||||
|
||||
[p1dl]: https://www.process-one.net/en/ejabberd/downloads/
|
||||
[p1dl]: https://www.process-one.net/download/ejabberd/
|
||||
[ghr]: https://github.com/processone/ejabberd/releases
|
||||
[gitrepo]: https://github.com/processone/ejabberd
|
||||
|
||||
|
@ -65,6 +65,11 @@ To configure the compilation, features, install paths...
|
|||
|
||||
./configure --help
|
||||
|
||||
The build tool automatically downloads and compiles the
|
||||
erlang libraries that [ejabberd depends on][docs-repo].
|
||||
|
||||
[docs-repo]: https://docs.ejabberd.im/developer/repositories/
|
||||
|
||||
|
||||
Install in the System
|
||||
---------------------
|
||||
|
@ -89,13 +94,8 @@ Build an OTP Release
|
|||
Instead of installing ejabberd in the system, you can build an OTP release
|
||||
that includes all necessary to run ejabberd in a subdirectory:
|
||||
|
||||
./configure --with-rebar=rebar3
|
||||
make rel
|
||||
|
||||
Or, if you have Elixir available and plan to develop Elixir code:
|
||||
|
||||
./configure --with-rebar=mix
|
||||
make dev
|
||||
./configure
|
||||
make prod
|
||||
|
||||
Check the full list of targets:
|
||||
|
||||
|
|
911
CONTAINER.md
911
CONTAINER.md
File diff suppressed because it is too large
Load diff
|
@ -3,21 +3,21 @@
|
|||
We'd love for you to contribute to our source code and to make ejabberd even better than it is
|
||||
today! Here are the guidelines we'd like you to follow:
|
||||
|
||||
* [Code of Conduct](#coc)
|
||||
* [Questions and Problems](#question)
|
||||
* [Issues and Bugs](#issue)
|
||||
* [Feature Requests](#feature)
|
||||
* [Issue Submission Guidelines](#submit)
|
||||
* [Pull Request Submission Guidelines](#submit-pr)
|
||||
* [Signing the CLA](#cla)
|
||||
* [Code of Conduct](#code-of-conduct)
|
||||
* [Questions and Problems](#questions-bugs-features)
|
||||
* [Issues and Bugs](#found-an-issue-or-bug)
|
||||
* [Feature Requests](#missing-a-feature)
|
||||
* [Issue Submission Guidelines](#issue-submission-guidelines)
|
||||
* [Pull Request Submission Guidelines](#pull-request-submission-guidelines)
|
||||
* [Signing the CLA](#signing-the-contributor-license-agreement-cla)
|
||||
|
||||
## <a name="coc"></a> Code of Conduct
|
||||
## Code of Conduct
|
||||
|
||||
Help us keep ejabberd community open-minded and inclusive. Please read and follow our [Code of Conduct][coc].
|
||||
|
||||
## <a name="requests"></a> Questions, Bugs, Features
|
||||
## Questions, Bugs, Features
|
||||
|
||||
### <a name="question"></a> Got a Question or Problem?
|
||||
### Got a Question or Problem?
|
||||
|
||||
Do not open issues for general support questions as we want to keep GitHub issues for bug reports
|
||||
and feature requests. You've got much better chances of getting your question answered on dedicated
|
||||
|
@ -25,25 +25,25 @@ support platforms, the best being [Stack Overflow][stackoverflow].
|
|||
|
||||
Stack Overflow is a much better place to ask questions since:
|
||||
|
||||
- there are thousands of people willing to help on Stack Overflow
|
||||
- questions and answers stay available for public viewing so your question / answer might help
|
||||
* there are thousands of people willing to help on Stack Overflow
|
||||
* questions and answers stay available for public viewing so your question / answer might help
|
||||
someone else
|
||||
- Stack Overflow's voting system assures that the best answers are prominently visible.
|
||||
* Stack Overflow's voting system assures that the best answers are prominently visible.
|
||||
|
||||
To save your and our time, we will systematically close all issues that are requests for general
|
||||
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 logs][logs]
|
||||
|
||||
### <a name="issue"></a> Found an Issue or Bug?
|
||||
* ejabberd XMPP room: [ejabberd@conference.process-one.net][muc]
|
||||
* [ejabberd Mailing List][list]
|
||||
|
||||
### Found an Issue or Bug?
|
||||
|
||||
If you find a bug in the source code, you can help us by submitting an issue to our
|
||||
[GitHub Repository][github]. Even better, you can submit a Pull Request with a fix.
|
||||
|
||||
### <a name="feature"></a> Missing a Feature?
|
||||
### Missing a Feature?
|
||||
|
||||
You can request a new feature by submitting an issue to our [GitHub Repository][github-issues].
|
||||
|
||||
|
@ -52,9 +52,9 @@ If you would like to implement a new feature then consider what kind of change i
|
|||
* **Major Changes** that you wish to contribute to the project should be discussed first in an
|
||||
[GitHub issue][github-issues] that clearly outlines the changes and benefits of the feature.
|
||||
* **Small Changes** can directly be crafted and submitted to the [GitHub Repository][github]
|
||||
as a Pull Request. See the section about [Pull Request Submission Guidelines](#submit-pr).
|
||||
as a Pull Request. See the section about [Pull Request Submission Guidelines](#pull-request-submission-guidelines).
|
||||
|
||||
## <a name="submit"></a> Issue Submission Guidelines
|
||||
## Issue Submission Guidelines
|
||||
|
||||
Before you submit your issue search the archive, maybe your question was already answered.
|
||||
|
||||
|
@ -64,7 +64,7 @@ the effort we can spend fixing issues and adding new features, by not reporting
|
|||
The "[new issue][github-new-issue]" form contains a number of prompts that you should fill out to
|
||||
make it easier to understand and categorize the issue.
|
||||
|
||||
## <a name="submit-pr"></a> Pull Request Submission Guidelines
|
||||
## Pull Request Submission Guidelines
|
||||
|
||||
By submitting a pull request for a code or doc contribution, you need to have the right
|
||||
to grant your contribution's copyright license to ProcessOne. Please check [ProcessOne CLA][cla]
|
||||
|
@ -80,6 +80,7 @@ Before you submit your pull request consider the following guidelines:
|
|||
```shell
|
||||
git checkout -b my-fix-branch master
|
||||
```
|
||||
|
||||
* Test your changes and, if relevant, expand the automated test suite.
|
||||
* Create your patch commit, including appropriate test cases.
|
||||
* If the changes affect public APIs, change or add relevant [documentation][doc-repo].
|
||||
|
@ -88,6 +89,7 @@ Before you submit your pull request consider the following guidelines:
|
|||
```shell
|
||||
git commit -a
|
||||
```
|
||||
|
||||
Note: the optional commit `-a` command line option will automatically "add" and "rm" edited files.
|
||||
|
||||
* Push your branch to GitHub:
|
||||
|
@ -123,28 +125,25 @@ restarted.
|
|||
|
||||
That's it! Thank you for your contribution!
|
||||
|
||||
## <a name="cla"></a> Signing the Contributor License Agreement (CLA)
|
||||
## Signing the Contributor License Agreement (CLA)
|
||||
|
||||
Upon submitting a Pull Request, we will ask you to sign our CLA if you haven't done
|
||||
so before. It's a quick process, we promise, and you will be able to do it all online
|
||||
|
||||
You can read [ProcessOne Contribution License Agreement][cla] in PDF.
|
||||
Here's a link to the [ProcessOne Contribution License Agreement][cla].
|
||||
|
||||
This is part of the legal framework of the open-source ecosystem that adds some red tape,
|
||||
but protects both the contributor and the company / foundation behind the project. It also
|
||||
gives us the option to relicense the code with a more permissive license in the future.
|
||||
|
||||
|
||||
[coc]: https://github.com/processone/ejabberd/blob/master/CODE_OF_CONDUCT.md
|
||||
[stackoverflow]: https://stackoverflow.com/questions/tagged/ejabberd?sort=newest
|
||||
[list]: https://lists.jabber.ru/mailman/listinfo/ejabberd
|
||||
[list]: https://web.archive.org/web/20230319174915/http://lists.jabber.ru/mailman/listinfo/ejabberd
|
||||
[muc]: xmpp:ejabberd@conference.process-one.net
|
||||
[logs]: https://process-one.net/logs/ejabberd@conference.process-one.net/
|
||||
[github]: https://github.com/processone/ejabberd
|
||||
[github-issues]: https://github.com/processone/ejabberd/issues
|
||||
[github-new-issue]: https://github.com/processone/ejabberd/issues/new
|
||||
[github-pr]: https://github.com/processone/ejabberd/pulls
|
||||
[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
|
||||
[cla]: https://cla.process-one.net/
|
||||
|
|
299
Makefile.in
299
Makefile.in
|
@ -1,8 +1,23 @@
|
|||
REBAR = @ESCRIPT@ @rebar@
|
||||
#.
|
||||
#' definitions
|
||||
#
|
||||
|
||||
ESCRIPT = @ESCRIPT@
|
||||
REBAR = @rebar@ # rebar|rebar3|mix binary (or path to binary)
|
||||
REBAR3 = @REBAR3@ # path to rebar3 binary
|
||||
MIX = @rebar@
|
||||
AWK = @AWK@
|
||||
INSTALL = @INSTALL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
SED = @SED@
|
||||
ERL = @ERL@
|
||||
EPMD = @EPMD@
|
||||
IEX = @IEX@
|
||||
|
||||
INSTALLUSER=@INSTALLUSER@
|
||||
INSTALLGROUP=@INSTALLGROUP@
|
||||
|
||||
REBAR_ENABLE_ELIXIR = @elixir@
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
@ -71,7 +86,10 @@ SPOOLDIR = @localstatedir@/lib/ejabberd
|
|||
# /var/log/ejabberd/
|
||||
LOGDIR = @localstatedir@/log/ejabberd
|
||||
|
||||
INSTALLUSER=@INSTALLUSER@
|
||||
#.
|
||||
#' install user
|
||||
#
|
||||
|
||||
# if no user was enabled, don't set privileges or ownership
|
||||
ifeq ($(INSTALLUSER),)
|
||||
O_USER=
|
||||
|
@ -86,18 +104,22 @@ else
|
|||
CHOWN_OUTPUT=&1
|
||||
INIT_USER=$(INSTALLUSER)
|
||||
endif
|
||||
|
||||
# if no group was enabled, don't set privileges or ownership
|
||||
INSTALLGROUP=@INSTALLGROUP@
|
||||
ifneq ($(INSTALLGROUP),)
|
||||
G_USER=-g $(INSTALLGROUP)
|
||||
endif
|
||||
|
||||
ifeq "$(MIX)" "mix"
|
||||
#.
|
||||
#' rebar / rebar3 / mix
|
||||
#
|
||||
|
||||
ifeq "$(notdir $(MIX))" "mix"
|
||||
REBAR_VER:=6
|
||||
REBAR_VER_318:=0
|
||||
else
|
||||
REBAR_VER:=$(shell $(REBAR) --version | awk -F '[ .]' '/rebar / {print $$2}')
|
||||
REBAR_VER_318:=$(shell $(REBAR) --version | awk -F '[ .]' '/rebar / {print ($$2 == 3 && $$3 >= 18 ? 1 : 0)}')
|
||||
REBAR_VER:=$(shell $(REBAR) --version | $(AWK) -F '[ .]' '/rebar / {print $$2}')
|
||||
REBAR_VER_318:=$(shell $(REBAR) --version | $(AWK) -F '[ .]' '/rebar / {print ($$2 == 3 && $$3 >= 18 ? 1 : 0)}')
|
||||
endif
|
||||
|
||||
ifeq "$(REBAR_VER)" "6"
|
||||
|
@ -112,11 +134,26 @@ ifeq "$(REBAR_VER)" "6"
|
|||
CONFIGURE_DEPS=(cd deps/eimp; ./configure)
|
||||
EBINDIR=$(DEPSDIR)/ejabberd/ebin
|
||||
XREFOPTIONS=graph
|
||||
EDOCPRE=MIX_ENV=edoc
|
||||
EDOCTASK=docs --proglang erlang
|
||||
CLEANARG=--deps
|
||||
ELIXIR_LIBDIR_RAW=$(shell elixir -e "IO.puts(:filename.dirname(:code.lib_dir(:elixir)))" -e ":erlang.halt")
|
||||
ELIXIR_LIBDIR=":$(ELIXIR_LIBDIR_RAW)"
|
||||
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
|
||||
RELIVECMD=$(ESCRIPT) rel/relive.escript && MIX_ENV=dev RELIVE=true $(IEX) --name ejabberd@localhost -S mix run
|
||||
REL_LIB_DIR = _build/dev/rel/ejabberd/lib
|
||||
COPY_REL_TARGET = dev
|
||||
GET_DEPS_TRANSLATIONS=MIX_ENV=translations $(REBAR) $(GET_DEPS)
|
||||
DEPSDIR_TRANSLATIONS=deps
|
||||
else
|
||||
ifeq ($(REBAR_ENABLE_ELIXIR),true)
|
||||
ELIXIR_LIBDIR_RAW=$(shell elixir -e "IO.puts(:filename.dirname(:code.lib_dir(:elixir)))" -e ":erlang.halt")
|
||||
ELIXIR_LIBDIR=":$(ELIXIR_LIBDIR_RAW)"
|
||||
EXPLICIT_ELIXIR_COMPILE=MIX_ENV=default mix compile.elixir
|
||||
EXPLICIT_ELIXIR_COMPILE_DEV=MIX_ENV=dev mix compile.elixir
|
||||
PREPARE_ELIXIR_SCRIPTS=$(MKDIR_P) rel/overlays; cp $(ELIXIR_LIBDIR_RAW)/../bin/iex rel/overlays/; cp $(ELIXIR_LIBDIR_RAW)/../bin/elixir rel/overlays/; sed -i 's|ERTS_BIN=$$|ERTS_BIN=$$SCRIPT_PATH/../../erts-{{erts_vsn}}/bin/|' rel/overlays/elixir
|
||||
endif
|
||||
ifeq "$(REBAR_VER)" "3"
|
||||
SKIPDEPS=
|
||||
LISTDEPS=tree
|
||||
|
@ -134,8 +171,12 @@ endif
|
|||
XREFOPTIONS=
|
||||
CLEANARG=--all
|
||||
REBARREL=$(REBAR) as prod tar
|
||||
REBARDEV=REBAR_PROFILE=dev $(REBAR) release
|
||||
RELIVECMD=$(REBAR) relive
|
||||
REBARDEV=$(REBAR) as dev release
|
||||
RELIVECMD=$(REBAR) as dev relive
|
||||
REL_LIB_DIR = _build/dev/rel/ejabberd/lib
|
||||
COPY_REL_TARGET = dev
|
||||
GET_DEPS_TRANSLATIONS=$(REBAR) as translations $(GET_DEPS)
|
||||
DEPSDIR_TRANSLATIONS=_build/translations/lib
|
||||
else
|
||||
SKIPDEPS=skip_deps=true
|
||||
LISTDEPS=-q list-deps
|
||||
|
@ -151,10 +192,16 @@ else
|
|||
REBARREL=$(REBAR) generate
|
||||
REBARDEV=
|
||||
RELIVECMD=@echo "Rebar2 detected... relive not supported.\
|
||||
\nTry: ./configure --with-rebar=./rebar3 ; make relive"
|
||||
\nTry: ./configure --with-rebar=rebar3 ; make relive"
|
||||
REL_LIB_DIR = rel/ejabberd/lib
|
||||
COPY_REL_TARGET = rel
|
||||
endif
|
||||
endif
|
||||
|
||||
#.
|
||||
#' main targets
|
||||
#
|
||||
|
||||
all: scripts deps src
|
||||
|
||||
deps: $(DEPSDIR)/.got
|
||||
|
@ -162,7 +209,7 @@ deps: $(DEPSDIR)/.got
|
|||
$(DEPSDIR)/.got:
|
||||
rm -rf $(DEPSDIR)/.got
|
||||
rm -rf $(DEPSDIR)/.built
|
||||
mkdir -p $(DEPSDIR)
|
||||
$(MKDIR_P) $(DEPSDIR)
|
||||
$(REBAR) $(GET_DEPS) && :> $(DEPSDIR)/.got
|
||||
$(CONFIGURE_DEPS)
|
||||
|
||||
|
@ -171,6 +218,7 @@ $(DEPSDIR)/.built: $(DEPSDIR)/.got
|
|||
|
||||
src: $(DEPSDIR)/.built
|
||||
$(REBAR) $(SKIPDEPS) compile
|
||||
$(EXPLICIT_ELIXIR_COMPILE)
|
||||
|
||||
update:
|
||||
rm -rf $(DEPSDIR)/.got
|
||||
|
@ -188,14 +236,45 @@ options: all
|
|||
tools/opt_types.sh ejabberd_option $(EBINDIR)
|
||||
|
||||
translations:
|
||||
tools/prepare-tr.sh $(DEPSDIR)
|
||||
$(GET_DEPS_TRANSLATIONS)
|
||||
tools/prepare-tr.sh $(DEPSDIR_TRANSLATIONS)
|
||||
|
||||
doap:
|
||||
tools/generate-doap.sh
|
||||
|
||||
edoc:
|
||||
$(ERL) -noinput +B -eval \
|
||||
'case edoc:application(ejabberd, ".", []) of ok -> halt(0); error -> halt(1) end.'
|
||||
#.
|
||||
#' edoc
|
||||
#
|
||||
|
||||
edoc: edoc_files edoc_compile
|
||||
$(EDOCPRE) $(REBAR) $(EDOCTASK)
|
||||
|
||||
edoc_compile: deps
|
||||
$(EDOCPRE) $(REBAR) compile
|
||||
|
||||
edoc_files: _build/edoc/docs.md _build/edoc/logo.png
|
||||
|
||||
_build/edoc/docs.md: edoc_compile
|
||||
echo "For much more detailed and complete ejabberd documentation, " \
|
||||
"go to the [ejabberd Docs](https://docs.ejabberd.im/) site." \
|
||||
> _build/edoc/docs.md
|
||||
|
||||
_build/edoc/logo.png: edoc_compile
|
||||
wget https://docs.ejabberd.im/assets/img/footer_logo_e.png -O _build/edoc/logo.png
|
||||
|
||||
#.
|
||||
#' format / indent
|
||||
#
|
||||
|
||||
format:
|
||||
tools/rebar3-format.sh $(REBAR3)
|
||||
|
||||
indent:
|
||||
tools/emacs-indent.sh
|
||||
|
||||
#.
|
||||
#' copy-files
|
||||
#
|
||||
|
||||
JOIN_PATHS=$(if $(wordlist 2,1000,$(1)),$(firstword $(1))/$(call JOIN_PATHS,$(wordlist 2,1000,$(1))),$(1))
|
||||
|
||||
|
@ -282,26 +361,58 @@ copy-files:
|
|||
|
||||
copy-files-sub: copy-files-sub2
|
||||
|
||||
#.
|
||||
#' copy-files-rel
|
||||
#
|
||||
|
||||
copy-files-rel: $(COPY_REL_TARGET)
|
||||
#
|
||||
# Libraries
|
||||
(cd $(REL_LIB_DIR) && find . -follow -type f ! -executable -exec $(INSTALL) -vDm 640 $(G_USER) {} $(DESTDIR)$(LIBDIR)/{} \;)
|
||||
#
|
||||
# *.so:
|
||||
(cd $(REL_LIB_DIR) && find . -follow -type f -executable -name *.so -exec $(INSTALL) -vDm 640 $(G_USER) {} $(DESTDIR)$(LIBDIR)/{} \;)
|
||||
#
|
||||
# Executable files
|
||||
(cd $(REL_LIB_DIR) && find . -follow -type f -executable ! -name *.so -exec $(INSTALL) -vDm 550 $(G_USER) {} $(DESTDIR)$(LIBDIR)/{} \;)
|
||||
|
||||
#.
|
||||
#' uninstall-librel
|
||||
#
|
||||
|
||||
uninstall-librel:
|
||||
(cd $(REL_LIB_DIR) && find . -follow -type f -exec rm -fv -v $(DESTDIR)$(LIBDIR)/{} \;)
|
||||
(cd $(REL_LIB_DIR) && find . -follow -depth -type d -exec rm -dv -v $(DESTDIR)$(LIBDIR)/{} \;)
|
||||
|
||||
#.
|
||||
#' relive
|
||||
#
|
||||
|
||||
relive:
|
||||
$(EXPLICIT_ELIXIR_COMPILE_DEV)
|
||||
$(RELIVECMD)
|
||||
|
||||
relivelibdir=$(shell pwd)/$(DEPSDIR)
|
||||
relivedir=$(shell pwd)/_build/relive
|
||||
iexpath=$(shell which iex)
|
||||
CONFIG_DIR = ${relivedir}/conf
|
||||
SPOOL_DIR = ${relivedir}/database
|
||||
LOGS_DIR = ${relivedir}/logs
|
||||
|
||||
#.
|
||||
#' scripts
|
||||
#
|
||||
|
||||
ejabberdctl.relive:
|
||||
$(SED) -e "s*{{installuser}}*@INSTALLUSER@*g" \
|
||||
$(SED) -e "s*{{installuser}}*${INSTALLUSER}*g" \
|
||||
-e "s*{{config_dir}}*${CONFIG_DIR}*g" \
|
||||
-e "s*{{logs_dir}}*${LOGS_DIR}*g" \
|
||||
-e "s*{{spool_dir}}*${SPOOL_DIR}*g" \
|
||||
-e "s*{{bindir}}/iex*$(iexpath)*g" \
|
||||
-e "s*{{bindir}}*@bindir@*g" \
|
||||
-e "s*{{libdir}}*${relivelibdir}*g" \
|
||||
-e "s*{{erl}}*@ERL@*g" \
|
||||
-e "s*{{epmd}}*@EPMD@*g" ejabberdctl.template \
|
||||
-e "s*{{bindir}}*${BINDIR}*g" \
|
||||
-e "s*{{libdir}}*${relivelibdir}${ELIXIR_LIBDIR}*g" \
|
||||
-e "s*ERTS_VSN*# ERTS_VSN*g" \
|
||||
-e "s*{{iexpath}}*${IEX}*g" \
|
||||
-e "s*{{erl}}*${ERL}*g" \
|
||||
-e "s*{{epmd}}*${EPMD}*g" ejabberdctl.template \
|
||||
> ejabberdctl.relive
|
||||
|
||||
ejabberd.init:
|
||||
|
@ -317,19 +428,29 @@ ejabberd.service:
|
|||
chmod 644 ejabberd.service
|
||||
|
||||
ejabberdctl.example: vars.config
|
||||
$(SED) -e "s*{{installuser}}*@INSTALLUSER@*g" \
|
||||
$(SED) -e "s*{{installuser}}*${INSTALLUSER}*g" \
|
||||
-e "s*{{config_dir}}*${ETCDIR}*g" \
|
||||
-e "s*{{logs_dir}}*${LOGDIR}*g" \
|
||||
-e "s*{{spool_dir}}*${SPOOLDIR}*g" \
|
||||
-e "s*{{bindir}}*@bindir@*g" \
|
||||
-e "s*{{libdir}}*@libdir@*g" \
|
||||
-e "s*{{erl}}*@ERL@*g" \
|
||||
-e "s*{{epmd}}*@EPMD@*g" ejabberdctl.template \
|
||||
-e "s*{{bindir}}*${BINDIR}*g" \
|
||||
-e "s*{{libdir}}*${LIBDIR}${ELIXIR_LIBDIR}*g" \
|
||||
-e "s*ERTS_VSN*# ERTS_VSN*g" \
|
||||
-e "s*{{iexpath}}*${IEX}*g" \
|
||||
-e "s*{{erl}}*${ERL}*g" \
|
||||
-e "s*{{epmd}}*${EPMD}*g" ejabberdctl.template \
|
||||
> ejabberdctl.example
|
||||
|
||||
scripts: ejabberd.init ejabberd.service ejabberdctl.example
|
||||
|
||||
install: copy-files
|
||||
#.
|
||||
#' install
|
||||
#
|
||||
|
||||
install: copy-files install-main
|
||||
|
||||
install-rel: copy-files-rel install-main
|
||||
|
||||
install-main:
|
||||
#
|
||||
# Configuration files
|
||||
$(INSTALL) -d -m 750 $(G_USER) $(DESTDIR)$(ETCDIR)
|
||||
|
@ -352,12 +473,12 @@ install: copy-files
|
|||
#
|
||||
# Spool directory
|
||||
$(INSTALL) -d -m 750 $(O_USER) $(DESTDIR)$(SPOOLDIR)
|
||||
$(CHOWN_COMMAND) -R @INSTALLUSER@ $(DESTDIR)$(SPOOLDIR) >$(CHOWN_OUTPUT)
|
||||
$(CHOWN_COMMAND) -R $(INSTALLUSER) $(DESTDIR)$(SPOOLDIR) >$(CHOWN_OUTPUT)
|
||||
chmod -R 750 $(DESTDIR)$(SPOOLDIR)
|
||||
#
|
||||
# Log directory
|
||||
$(INSTALL) -d -m 750 $(O_USER) $(DESTDIR)$(LOGDIR)
|
||||
$(CHOWN_COMMAND) -R @INSTALLUSER@ $(DESTDIR)$(LOGDIR) >$(CHOWN_OUTPUT)
|
||||
$(CHOWN_COMMAND) -R $(INSTALLUSER) $(DESTDIR)$(LOGDIR) >$(CHOWN_OUTPUT)
|
||||
chmod -R 750 $(DESTDIR)$(LOGDIR)
|
||||
#
|
||||
# Documentation
|
||||
|
@ -368,8 +489,14 @@ install: copy-files
|
|||
|| echo "Man page not included in sources"
|
||||
$(INSTALL) -m 644 COPYING $(DESTDIR)$(DOCDIR)
|
||||
|
||||
#.
|
||||
#' uninstall
|
||||
#
|
||||
|
||||
uninstall: uninstall-binary
|
||||
|
||||
uninstall-rel: uninstall-binary uninstall-librel
|
||||
|
||||
uninstall-binary:
|
||||
rm -f $(DESTDIR)$(SBINDIR)/ejabberdctl
|
||||
rm -f $(DESTDIR)$(BINDIR)/iex
|
||||
|
@ -398,6 +525,7 @@ uninstall-binary:
|
|||
rm -fr $(DESTDIR)$(LUADIR)
|
||||
rm -fr $(DESTDIR)$(PRIVDIR)
|
||||
rm -fr $(DESTDIR)$(EJABBERDDIR)
|
||||
rm -f $(DESTDIR)$(MANDIR)/ejabberd.yml.5
|
||||
|
||||
uninstall-all: uninstall-binary
|
||||
rm -rf $(DESTDIR)$(ETCDIR)
|
||||
|
@ -405,6 +533,10 @@ uninstall-all: uninstall-binary
|
|||
rm -rf $(DESTDIR)$(SPOOLDIR)
|
||||
rm -rf $(DESTDIR)$(LOGDIR)
|
||||
|
||||
#.
|
||||
#' clean
|
||||
#
|
||||
|
||||
clean:
|
||||
rm -rf $(DEPSDIR)/.got
|
||||
rm -rf $(DEPSDIR)/.built
|
||||
|
@ -427,27 +559,53 @@ distclean: clean clean-rel
|
|||
rm -f Makefile
|
||||
rm -f vars.config
|
||||
|
||||
rel:
|
||||
#.
|
||||
#' releases
|
||||
#
|
||||
|
||||
rel: prod
|
||||
|
||||
prod:
|
||||
$(PREPARE_ELIXIR_SCRIPTS)
|
||||
$(REBARREL)
|
||||
|
||||
DEV_CONFIG = _build/dev/rel/ejabberd/conf/ejabberd.yml
|
||||
|
||||
dev $(DEV_CONFIG):
|
||||
$(PREPARE_ELIXIR_SCRIPTS)
|
||||
$(REBARDEV)
|
||||
|
||||
#.
|
||||
#' tags
|
||||
#
|
||||
|
||||
TAGS:
|
||||
etags *.erl
|
||||
etags src/*.erl
|
||||
|
||||
#.
|
||||
#' makefile
|
||||
#
|
||||
|
||||
Makefile: Makefile.in
|
||||
|
||||
ifeq "$(REBAR_VER)" "3"
|
||||
#.
|
||||
#' dialyzer
|
||||
#
|
||||
|
||||
ifeq "$(REBAR_VER)" "6" # Mix
|
||||
dialyzer:
|
||||
MIX_ENV=test $(REBAR) dialyzer
|
||||
|
||||
else
|
||||
ifeq "$(REBAR_VER)" "3" # Rebar3
|
||||
dialyzer:
|
||||
$(REBAR) dialyzer
|
||||
else
|
||||
|
||||
else # Rebar2
|
||||
deps := $(wildcard $(DEPSDIR)/*/ebin)
|
||||
|
||||
dialyzer/erlang.plt:
|
||||
@mkdir -p dialyzer
|
||||
@$(MKDIR_P) dialyzer
|
||||
@dialyzer --build_plt --output_plt dialyzer/erlang.plt \
|
||||
-o dialyzer/erlang.log --apps kernel stdlib sasl crypto \
|
||||
public_key ssl mnesia inets odbc compiler erts \
|
||||
|
@ -455,13 +613,13 @@ dialyzer/erlang.plt:
|
|||
status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
|
||||
|
||||
dialyzer/deps.plt:
|
||||
@mkdir -p dialyzer
|
||||
@$(MKDIR_P) dialyzer
|
||||
@dialyzer --build_plt --output_plt dialyzer/deps.plt \
|
||||
-o dialyzer/deps.log $(deps); \
|
||||
status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
|
||||
|
||||
dialyzer/ejabberd.plt:
|
||||
@mkdir -p dialyzer
|
||||
@$(MKDIR_P) dialyzer
|
||||
@dialyzer --build_plt --output_plt dialyzer/ejabberd.plt \
|
||||
-o dialyzer/ejabberd.log ebin; \
|
||||
status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
|
||||
|
@ -483,6 +641,18 @@ dialyzer: erlang_plt deps_plt ejabberd_plt
|
|||
--get_warnings -o dialyzer/error.log ebin; \
|
||||
status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
|
||||
endif
|
||||
endif
|
||||
|
||||
#.
|
||||
#' elvis
|
||||
#
|
||||
|
||||
elvis:
|
||||
$(REBAR) lint
|
||||
|
||||
#.
|
||||
#' test
|
||||
#
|
||||
|
||||
test:
|
||||
@echo "************************** NOTICE ***************************************"
|
||||
|
@ -491,9 +661,32 @@ test:
|
|||
@cd priv && ln -sf ../sql
|
||||
$(REBAR) $(SKIPDEPS) ct
|
||||
|
||||
.PHONY: src edoc dialyzer Makefile TAGS clean clean-rel distclean rel \
|
||||
install uninstall uninstall-binary uninstall-all translations deps test \
|
||||
quicktest erlang_plt deps_plt ejabberd_plt xref hooks options
|
||||
.PHONY: test-%
|
||||
define test-group-target
|
||||
test-$1:
|
||||
$(REBAR) $(SKIPDEPS) ct --suite=test/ejabberd_SUITE --group=$1
|
||||
endef
|
||||
|
||||
ifneq ($(filter test-%,$(MAKECMDGOALS)),)
|
||||
group_to_test := $(patsubst test-%,%,$(filter test-%,$(MAKECMDGOALS)))
|
||||
$(eval $(call test-group-target,$(group_to_test)))
|
||||
endif
|
||||
|
||||
test-eunit:
|
||||
$(REBAR) $(SKIPDEPS) eunit --verbose
|
||||
|
||||
#.
|
||||
#' phony
|
||||
#
|
||||
|
||||
.PHONY: src edoc dialyzer Makefile TAGS clean clean-rel distclean prod rel \
|
||||
install uninstall uninstall-binary uninstall-all translations deps test test-eunit \
|
||||
all dev doap help install-rel relive scripts uninstall-rel update \
|
||||
erlang_plt deps_plt ejabberd_plt xref hooks options format indent
|
||||
|
||||
#.
|
||||
#' help
|
||||
#
|
||||
|
||||
help:
|
||||
@echo ""
|
||||
|
@ -501,25 +694,37 @@ help:
|
|||
@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 " update Update dependencies source code"
|
||||
@echo " clean Clean binary files"
|
||||
@echo " distclean Clean completely the development files"
|
||||
@echo ""
|
||||
@echo " install Install ejabberd to /usr/local"
|
||||
@echo " install-rel Install ejabberd to /usr/local (using release)"
|
||||
@echo " uninstall Uninstall ejabberd (buggy)"
|
||||
@echo " uninstall-rel Uninstall ejabberd (using release)"
|
||||
@echo " uninstall-all Uninstall also configuration, logs, mnesia... (buggy)"
|
||||
@echo ""
|
||||
@echo " rel Build a production release"
|
||||
@echo " prod Build a production release"
|
||||
@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 " edoc Generate EDoc documentation [mix]"
|
||||
@echo " options Generate ejabberd_option.erl"
|
||||
@echo " translations Extract translation files (requires --enable-tools)"
|
||||
@echo " tags Generate tags file for text editors"
|
||||
@echo " translations Extract translation files"
|
||||
@echo " TAGS Generate tags file for text editors"
|
||||
@echo ""
|
||||
@echo " format Format source code using rebar3_format"
|
||||
@echo " indent Indent source code using erlang-mode [emacs]"
|
||||
@echo ""
|
||||
@echo " dialyzer Run Dialyzer static analyzer"
|
||||
@echo " elvis Run Elvis source code style reviewer [rebar3]"
|
||||
@echo " hooks Run hooks validator"
|
||||
@echo " test Run Common Tests suite"
|
||||
@echo " xref Run cross reference analysis"
|
||||
@echo " test Run Common Tests suite [rebar3]"
|
||||
@echo " test-eunit Run EUnit suite [rebar3]"
|
||||
@echo " test-<group> Run Common Test suite for specific group only [rebar3]"
|
||||
@echo " xref Run cross reference analysis [rebar3]"
|
||||
|
||||
#.
|
||||
#'
|
||||
# vim: foldmarker=#',#. foldmethod=marker:
|
||||
|
|
66
README.md
66
README.md
|
@ -1,29 +1,29 @@
|
|||
|
||||
<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>
|
||||
<a href="https://coveralls.io/github/processone/ejabberd?branch=master" alt="Coverage Status">
|
||||
<img src="https://coveralls.io/repos/github/processone/ejabberd/badge.svg?branch=master "Coverage in coveralls.io"" /></a>
|
||||
<img src="https://coveralls.io/repos/github/processone/ejabberd/badge.svg?branch=master" /></a>
|
||||
<a href="https://hosted.weblate.org/projects/ejabberd/ejabberd-po/" alt="Translation status">
|
||||
<img src="https://hosted.weblate.org/widgets/ejabberd/-/ejabberd-po/svg-badge.svg"" /></a>
|
||||
<img src="https://hosted.weblate.org/widgets/ejabberd/-/ejabberd-po/svg-badge.svg" /></a>
|
||||
<a href="https://docs.ejabberd.im/" alt="ejabberd Docs">
|
||||
<img src="https://img.shields.io/github/v/tag/processone/docs.ejabberd.im?sort=semver&logo=&label=docs&logoWidth=0" /></a>
|
||||
</p>
|
||||
|
||||
|
||||
[ejabberd][im] is an open-source,
|
||||
robust, scalable and extensible realtime platform built using [Erlang/OTP][erlang],
|
||||
that includes [XMPP][xmpp] Server, [MQTT][mqtt] Broker and [SIP][sip] Service.
|
||||
|
@ -38,12 +38,16 @@ Installation
|
|||
There are several ways to install ejabberd:
|
||||
|
||||
- Source code: compile yourself, see [COMPILE](COMPILE.md)
|
||||
- Installers from [ProcessOne Download][p1download] or [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:
|
||||
- [ProcessOne Download Page][p1download] or [GitHub Releases][releases] for releases.
|
||||
- [GitHub Actions](https://github.com/processone/ejabberd/actions/workflows/installers.yml) for master branch (`run`/`deb`/`rpm` for `x64` and `arm64`)
|
||||
- Docker Containers:
|
||||
- `ecs` container image: [Docker Hub][hubecs] and [Github Packages][packagesecs], see [ecs README][docker-ecs-readme] (for `x64`)
|
||||
- `ejabberd` container image: [Github Packages][packages] for releases and master branch, see [CONTAINER](CONTAINER.md) (for `x64` and `arm64`)
|
||||
- Using your [Operating System package][osp]
|
||||
- Using the [Homebrew][homebrew] package manager
|
||||
|
||||
More info can be found in the `Installation` part of [ejabberd Docs](https://docs.ejabberd.im/admin/install/).
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
@ -60,7 +64,6 @@ Once ejabberd is installed, try:
|
|||
ejabberdctl help
|
||||
man ejabberd.yml
|
||||
|
||||
|
||||
Development
|
||||
-----------
|
||||
|
||||
|
@ -72,31 +75,37 @@ or in your local machine as explained in [Localization][localization].
|
|||
|
||||
Documentation for developers is available in [ejabberd docs: Developers][docs-dev].
|
||||
|
||||
There are nightly builds of ejabberd, both for `master` branch and for Pull Requests:
|
||||
|
||||
- Installers: go to [GitHub Actions: Installers](https://github.com/processone/ejabberd/actions/workflows/installers.yml), open the most recent commit, on the bottom of that commit page, download the `ejabberd-packages.zip` artifact.
|
||||
- `ejabberd` container image: go to [ejabberd Github Packages][packages]
|
||||
|
||||
Security reports or concerns should preferably be reported privately,
|
||||
please send an email to the address: contact [at] process-one [dot] net
|
||||
please send an email to the address: contact at process-one dot net
|
||||
or some other method from [ProcessOne Contact][p1contact].
|
||||
|
||||
For commercial offering and support, including [ejabberd Business Edition][p1home]
|
||||
and [Fluux (ejabberd in the Cloud)][fluux], please check [ProcessOne ejabberd page][p1home].
|
||||
|
||||
Security
|
||||
--------
|
||||
|
||||
For information on how to report security vulnerabilities, please refer to the [SECURITY.md](SECURITY.md) file. It contains guidelines on how to report vulnerabilities privately and securely, ensuring that any issues are addressed in a timely and confidential manner.
|
||||
|
||||
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]
|
||||
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
ejabberd is released under the GNU General Public License v2 (see [COPYING](COPYING.md)),
|
||||
and [ejabberd translations](https://github.com/processone/ejabberd-po/) under MIT License.
|
||||
|
||||
- ejabberd is released under the __GNU General Public License v2__ (see [COPYING](COPYING))
|
||||
- [ejabberd translations](https://github.com/processone/ejabberd-po/) under __MIT License__.
|
||||
|
||||
[discussions]: https://github.com/processone/ejabberd/discussions
|
||||
[docker-ecs-readme]: https://github.com/processone/docker-ejabberd/tree/master/ecs#readme
|
||||
|
@ -105,24 +114,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
|
||||
[homebrew]: https://docs.ejabberd.im/admin/install/homebrew/
|
||||
[hubecs]: https://hub.docker.com/r/ejabberd/ecs/
|
||||
[im]: https://ejabberd.im/
|
||||
[im]: https://www.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/
|
||||
[p1download]: https://www.process-one.net/en/ejabberd/downloads/
|
||||
[p1home]: https://www.process-one.net/en/ejabberd/
|
||||
[osp]: https://docs.ejabberd.im/admin/install/os-package/
|
||||
[p1contact]: https://www.process-one.net/contact/
|
||||
[p1download]: https://www.process-one.net/download/ejabberd/
|
||||
[p1home]: https://www.process-one.net/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/
|
||||
[xeps]: https://www.process-one.net/ejabberd-features/
|
||||
[xmpp]: https://xmpp.org/
|
||||
[xmppej]: https://xmpp.org/software/servers/ejabberd/
|
||||
|
|
45
SECURITY.md
Normal file
45
SECURITY.md
Normal file
|
@ -0,0 +1,45 @@
|
|||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
We recommend that all users always use the latest version of ejabberd.
|
||||
|
||||
To ensure the best experience and security, upgrade to the latest version available on [this repo](https://github.com/processone/ejabberd).
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
### Private Reporting
|
||||
|
||||
**Preferred Method**: Use GitHub's private vulnerability reporting system by clicking the "Report a Vulnerability" button in the [Security tab of this repository](https://github.com/processone/ejabberd/security). This ensures your report is securely transmitted and tracked.
|
||||
|
||||
**Alternative**: If you cannot use the GitHub system, send an email to **`contact@process-one.net`** with the following details:
|
||||
|
||||
- A clear description of the vulnerability.
|
||||
- Steps to reproduce the issue.
|
||||
- Any potential impact or exploitation scenarios.
|
||||
|
||||
### Response Time
|
||||
|
||||
We aim to acknowledge receipt of your report within 72 hours. You can expect regular updates on the status of your report.
|
||||
|
||||
### Resolution
|
||||
|
||||
If the vulnerability is confirmed, we will work on a patch or mitigation strategy.
|
||||
We will notify you once the issue is resolved and coordinate a public disclosure if needed.
|
||||
|
||||
### Acknowledgements
|
||||
|
||||
We value and appreciate the contributions of security researchers and community members.
|
||||
If you wish, we are happy to acknowledge your efforts publicly by listing your name (or alias) below in this document.
|
||||
Please let us know if you would like to be recognized when reporting the vulnerability.
|
||||
|
||||
## Public Discussion
|
||||
|
||||
For general inquiries or discussions about the project’s security, feel free to chat with us here:
|
||||
|
||||
- XMPP room: `ejabberd@conference.process-one.net`
|
||||
- [GitHub Discussions](https://github.com/processone/ejabberd/discussions)
|
||||
|
||||
However, please note that if the issue is **critical** or potentially exploitable, **do not share it publicly**. Instead, we strongly recommend you contact the maintainers directly via the private reporting methods outlined above to ensure a secure and timely response.
|
||||
|
||||
Thank you for helping us improve the security of ejabberd!
|
|
@ -8,6 +8,8 @@ end
|
|||
rootpath = System.get_env("RELEASE_ROOT", rootdefault)
|
||||
config :ejabberd,
|
||||
file: Path.join(rootpath, "conf/ejabberd.yml"),
|
||||
log_path: Path.join(rootpath, 'logs/ejabberd.log')
|
||||
log_path: Path.join(rootpath, "logs/ejabberd.log")
|
||||
config :mnesia,
|
||||
dir: Path.join(rootpath, 'database/')
|
||||
dir: Path.join(rootpath, "database/")
|
||||
config :exsync,
|
||||
reload_callback: {:ejabberd_admin, :update, []}
|
||||
|
|
80
configure.ac
80
configure.ac
|
@ -2,15 +2,26 @@
|
|||
# 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 23.01` | 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 25.08` | sed 's/-g.*//;s/-/./' | tr -d '\012']), [ejabberd@process-one.net], [ejabberd])
|
||||
|
||||
AC_ARG_WITH(min-erlang,
|
||||
AS_HELP_STRING([--with-min-erlang=version],[set minimal required erlang version, default to OTP25]),
|
||||
[if test "X$withval" = "X"; then
|
||||
REQUIRE_ERLANG_MIN="13.0 (Erlang/OTP 25.0)"
|
||||
else
|
||||
REQUIRE_ERLANG_MIN="$withval"
|
||||
fi
|
||||
], [REQUIRE_ERLANG_MIN="13.0 (Erlang/OTP 25.0)"])
|
||||
|
||||
REQUIRE_ERLANG_MAX="100.0.0 (No Max)"
|
||||
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_MAKE_SET
|
||||
AC_PROG_AWK
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_MKDIR_P
|
||||
AC_PROG_SED
|
||||
|
||||
if test "x$GCC" = "xyes"; then
|
||||
|
@ -28,18 +39,42 @@ fi
|
|||
])
|
||||
|
||||
AC_ARG_WITH(rebar,
|
||||
AS_HELP_STRING([--with-rebar=bin],[use the rebar/rebar3/mix binary specified]),
|
||||
AS_HELP_STRING([--with-rebar=bin],[use as build tool the rebar/rebar3/mix binary specified]),
|
||||
[if test "$withval" = "yes" -o "$withval" = "no" -o "X$with_rebar" = "X"; then
|
||||
rebar="rebar"
|
||||
rebar="rebar3"
|
||||
else
|
||||
rebar="$with_rebar"
|
||||
fi
|
||||
], [rebar="rebar"])
|
||||
], [rebar="unconfigured"])
|
||||
|
||||
AC_PATH_TOOL(ERL, erl, , [${extra_erl_path}$PATH])
|
||||
AC_PATH_TOOL(ERLC, erlc, , [${extra_erl_path}$PATH])
|
||||
AC_PATH_TOOL(EPMD, epmd, , [${extra_erl_path}$PATH])
|
||||
|
||||
AC_PATH_TOOL(REBAR, rebar, , [${extra_erl_path}$PATH])
|
||||
AC_PATH_TOOL(REBAR3, rebar3, , [${extra_erl_path}$PATH])
|
||||
AC_PATH_TOOL(ELIXIR, elixir, , [${extra_erl_path}$PATH])
|
||||
AC_PATH_TOOL(IEX, iex, , [${extra_erl_path}$PATH])
|
||||
AC_PATH_TOOL(MIX, mix, , [${extra_erl_path}$PATH])
|
||||
|
||||
if test "$rebar" = unconfigured; then
|
||||
if test "x$ELIXIR" = "x" -o "x$IEX" = "x" -o "x$MIX" = "x"; then
|
||||
if test "x$REBAR3" = "x"; then
|
||||
rebar="rebar3"
|
||||
else
|
||||
rebar=$REBAR3
|
||||
fi
|
||||
else
|
||||
rebar=$MIX
|
||||
fi
|
||||
fi
|
||||
if test "x$rebar" = "xrebar" -a "x$REBAR" = "x" ; then
|
||||
rebar="./rebar"
|
||||
fi
|
||||
if test "x$rebar" = "xrebar3" -a "x$REBAR3" = "x" ; then
|
||||
rebar="./rebar3"
|
||||
fi
|
||||
|
||||
AC_ERLANG_NEED_ERL
|
||||
AC_ERLANG_NEED_ERLC
|
||||
|
||||
|
@ -84,7 +119,7 @@ AC_ARG_ENABLE(debug,
|
|||
esac],[if test "x$debug" = "x"; then debug=true; fi])
|
||||
|
||||
AC_ARG_ENABLE(elixir,
|
||||
[AS_HELP_STRING([--enable-elixir],[enable Elixir support (default: no)])],
|
||||
[AS_HELP_STRING([--enable-elixir],[enable Elixir support in Rebar3 (default: no)])],
|
||||
[case "${enableval}" in
|
||||
yes) elixir=true ;;
|
||||
no) elixir=false ;;
|
||||
|
@ -112,7 +147,7 @@ esac],[full_xml=false])
|
|||
|
||||
ENABLEGROUP=""
|
||||
AC_ARG_ENABLE(group,
|
||||
[AS_HELP_STRING([--enable-group[[[[=GROUP]]]]], [allow this system group to start ejabberd (default: no)])],
|
||||
[AS_HELP_STRING([--enable-group[[=GROUP]]], [specify the group of the account defined in --enable-user (default: no)])],
|
||||
[case "${enableval}" in
|
||||
yes) ENABLEGROUP=`groups |head -n 1` ;;
|
||||
no) ENABLEGROUP="" ;;
|
||||
|
@ -237,7 +272,7 @@ AC_ARG_ENABLE(system_deps,
|
|||
esac],[if test "x$system_deps" = "x"; then system_deps=false; fi])
|
||||
|
||||
AC_ARG_ENABLE(tools,
|
||||
[AS_HELP_STRING([--enable-tools],[build development tools (default: no)])],
|
||||
[AS_HELP_STRING([--enable-tools],[include debugging/development tools (default: no)])],
|
||||
[case "${enableval}" in
|
||||
yes) tools=true ;;
|
||||
no) tools=false ;;
|
||||
|
@ -246,7 +281,7 @@ esac],[if test "x$tools" = "x"; then tools=false; fi])
|
|||
|
||||
ENABLEUSER=""
|
||||
AC_ARG_ENABLE(user,
|
||||
[AS_HELP_STRING([--enable-user[[[[=USER]]]]], [allow this system user to start ejabberd (default: no)])],
|
||||
[AS_HELP_STRING([--enable-user[[=USER]]], [allow this system user to start ejabberd (default: no)])],
|
||||
[case "${enableval}" in
|
||||
yes) ENABLEUSER=`whoami` ;;
|
||||
no) ENABLEUSER="" ;;
|
||||
|
@ -280,6 +315,8 @@ case "`uname`" in
|
|||
;;
|
||||
esac
|
||||
|
||||
AC_MSG_RESULT([build tool to use (change using --with-rebar): $rebar])
|
||||
|
||||
AC_SUBST(roster_gateway_workaround)
|
||||
AC_SUBST(new_sql_schema)
|
||||
AC_SUBST(full_xml)
|
||||
|
@ -305,3 +342,28 @@ AC_SUBST(CPPFLAGS)
|
|||
AC_SUBST(LDFLAGS)
|
||||
|
||||
AC_OUTPUT
|
||||
|
||||
AS_CASE([$rebar],
|
||||
[*rebar3], [
|
||||
deps=""
|
||||
AS_IF([test "x$stun" = "xfalse"], [deps="stun,$deps"])
|
||||
AS_IF([test "x$sqlite" = "xfalse"], [deps="sqlite3,$deps"])
|
||||
AS_IF([test "x$pgsql" = "xfalse"], [deps="p1_pgsql,$deps"])
|
||||
AS_IF([test "x$mysql" = "xfalse"], [deps="p1_mysql,$deps"])
|
||||
AS_IF([test "x$zlib" = "xfalse"], [deps="ezlib,$deps"])
|
||||
AS_IF([test "x$sip" = "xfalse"], [deps="esip,$deps"])
|
||||
AS_IF([test "x$redis" = "xfalse"], [deps="eredis,$deps"])
|
||||
AS_IF([test "x$pam" = "xfalse"], [deps="epam,$deps"])
|
||||
AS_IF([test "x$deps" = "x"], [],
|
||||
[AC_MSG_NOTICE([unlocking disabled rebar3 dependencies: $deps])
|
||||
$rebar unlock "$deps"])
|
||||
deps=""
|
||||
ERLANG_VERSION=m4_esyscmd([erl -noinput -noshell -eval 'erlang:display(list_to_integer(erlang:system_info(otp_release))), halt().'])
|
||||
AS_IF([test "$ERLANG_VERSION" -lt "21"], [deps="luerl,$deps"])
|
||||
AS_IF([test "$ERLANG_VERSION" -lt "22"], [deps="lager,$deps"])
|
||||
AS_IF([test "$ERLANG_VERSION" -le "23"], [deps="jose,$deps"])
|
||||
AS_IF([test "$ERLANG_VERSION" -ge "27"], [deps="jiffy,$deps"])
|
||||
AS_IF([test "x$deps" = "x"], [],
|
||||
[AC_MSG_NOTICE([unlocking rebar3 dependencies for old Erlang/OTP: $deps])
|
||||
$rebar unlock "$deps"])
|
||||
])
|
||||
|
|
501
ejabberd.doap
501
ejabberd.doap
|
@ -19,10 +19,10 @@
|
|||
<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-page rdf:resource="https://www.process-one.net/download/ejabberd/"/>
|
||||
<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"/>
|
||||
<schema:logo rdf:resource="https://docs.ejabberd.im/assets/img/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>
|
||||
|
@ -48,8 +48,8 @@
|
|||
<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:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -57,8 +57,8 @@
|
|||
<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:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_last</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -67,7 +67,7 @@
|
|||
<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:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_offline</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -75,8 +75,8 @@
|
|||
<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:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_privacy</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -84,8 +84,8 @@
|
|||
<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:since>0.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_offline</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -93,8 +93,8 @@
|
|||
<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:since>0.7.5</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_offline</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -102,8 +102,8 @@
|
|||
<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:since>0.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_disco</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -112,7 +112,7 @@
|
|||
<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:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_multicast</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -120,8 +120,8 @@
|
|||
<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:since>0.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_stats</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -129,17 +129,26 @@
|
|||
<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:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_muc</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0048.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_pubsub</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:since>0.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_private</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -147,8 +156,8 @@
|
|||
<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:since>1.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_adhoc</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -156,8 +165,8 @@
|
|||
<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:since>0.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_vcard</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -165,17 +174,26 @@
|
|||
<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:since>0.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_vcard</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0059.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></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:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>partial</xmpp:status>
|
||||
<xmpp:note>mod_pubsub</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -183,8 +201,8 @@
|
|||
<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:since>2.0.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_proxy65</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -192,8 +210,8 @@
|
|||
<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:since>0.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_register</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -201,17 +219,26 @@
|
|||
<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:since>17.03</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_legacy_auth</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0082.html"/>
|
||||
<xmpp:version>1.1.1</xmpp:version>
|
||||
<xmpp:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></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:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_client_state</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -219,8 +246,8 @@
|
|||
<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:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -228,8 +255,8 @@
|
|||
<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:since>0.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_version</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -237,8 +264,8 @@
|
|||
<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:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -246,8 +273,8 @@
|
|||
<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:since>0.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>ejabberd_service</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -255,8 +282,8 @@
|
|||
<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:since>2.1.4</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_caps</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -264,26 +291,35 @@
|
|||
<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:since>16.12</xmpp:since>
|
||||
<xmpp:status>complete</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:version>1.3.0</xmpp:version>
|
||||
<xmpp:since>13.10</xmpp:since>
|
||||
<xmpp:status>partial</xmpp:status>
|
||||
<xmpp:note>mod_configure</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0138.html"/>
|
||||
<xmpp:version>2.1</xmpp:version>
|
||||
<xmpp:since>1.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>ejabberd_c2s</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:since>17.09</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_vcard</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -292,7 +328,7 @@
|
|||
<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:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_host_meta</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -300,8 +336,8 @@
|
|||
<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:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_disco</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -309,8 +345,8 @@
|
|||
<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:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>ejabberd_captcha</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -318,8 +354,8 @@
|
|||
<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:since>16.01</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_offline</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -327,8 +363,8 @@
|
|||
<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:since>2.0.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_pubsub</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -336,26 +372,35 @@
|
|||
<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:since>17.12</xmpp:since>
|
||||
<xmpp:status>complete</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:xep rdf:resource="https://xmpp.org/extensions/xep-0175.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:since>1.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>ejabberd_auth_anonymous</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0178.html"/>
|
||||
<xmpp:version>1.1</xmpp:version>
|
||||
<xmpp:since>17.03</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></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:since>17.03</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_s2s_dialback</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -363,8 +408,8 @@
|
|||
<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:since>2.1.7</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_blocking</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -373,7 +418,7 @@
|
|||
<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:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_stream_mgmt</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -381,8 +426,8 @@
|
|||
<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:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_ping</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -390,17 +435,26 @@
|
|||
<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:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_time</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0203.html"/>
|
||||
<xmpp:version>2.0</xmpp:version>
|
||||
<xmpp:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_offline</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:since>1.1.2</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -408,80 +462,71 @@
|
|||
<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:since>16.12</xmpp:since>
|
||||
<xmpp:status>complete</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:status>complete</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:xep rdf:resource="https://xmpp.org/extensions/xep-0220.html"/>
|
||||
<xmpp:version>1.1.1</xmpp:version>
|
||||
<xmpp:since>17.03</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_s2s_dialback</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:xep rdf:resource="https://xmpp.org/extensions/xep-0223.html"/>
|
||||
<xmpp:version>1.1.1</xmpp:version>
|
||||
<xmpp:since>2.0.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_pubsub</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:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>partial</xmpp:status>
|
||||
<xmpp:note>ejabberd_piefxis</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0231.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>ejabberd_captcha</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:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</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:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_pubsub</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -489,54 +534,54 @@
|
|||
<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:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>complete</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:since>2.1.3</xmpp:since>
|
||||
<xmpp:status>complete</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:version>1.0.1</xmpp:version>
|
||||
<xmpp:since>13.06</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_carboncopy</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0288.html"/>
|
||||
<xmpp:version>1.0.1</xmpp:version>
|
||||
<xmpp:since>24.10</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_s2s_bidi</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:status>complete</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:version>0.3.1</xmpp:version>
|
||||
<xmpp:since>21.12</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:note>mod_muc_room, conversejs/prosody compatible</xmpp:note>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_muc_room, 0.3.1 since 25.xx</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
|
@ -544,7 +589,7 @@
|
|||
<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:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_jidprep</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -552,8 +597,8 @@
|
|||
<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:since>16.01</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_mam, mod_muc_log, mod_offline</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -562,7 +607,7 @@
|
|||
<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:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_client_state</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -571,16 +616,16 @@
|
|||
<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:status>complete</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:version>0.4.1</xmpp:version>
|
||||
<xmpp:since>24.10</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_privilege</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -589,7 +634,7 @@
|
|||
<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:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_push</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -597,17 +642,17 @@
|
|||
<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:since>15.09</xmpp:since>
|
||||
<xmpp:status>complete</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:version>0.3.0</xmpp:version>
|
||||
<xmpp:since>15.10</xmpp:since>
|
||||
<xmpp:status></xmpp:status>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_http_upload</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -615,8 +660,8 @@
|
|||
<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:since>17.09</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -625,25 +670,61 @@
|
|||
<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:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_mix</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0384.html"/>
|
||||
<xmpp:version>0.8.3</xmpp:version>
|
||||
<xmpp:since>21.12</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>node_pep</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0386.html"/>
|
||||
<xmpp:version>0.3.0</xmpp:version>
|
||||
<xmpp:since>24.02</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0388.html"/>
|
||||
<xmpp:version>0.4.0</xmpp:version>
|
||||
<xmpp:since>24.02</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></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:version>0.2.0</xmpp:version>
|
||||
<xmpp:since>18.03</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_avatar</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>complete</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:since>19.02</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_mix_pam</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -652,7 +733,7 @@
|
|||
<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:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_muc_room</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
|
@ -661,18 +742,108 @@
|
|||
<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:status>complete</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>complete</xmpp:status>
|
||||
<xmpp:note>mod_muc_occupantid</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0424.html"/>
|
||||
<xmpp:version>0.4.2</xmpp:version>
|
||||
<xmpp:since>24.02</xmpp:since>
|
||||
<xmpp:status>partial</xmpp:status>
|
||||
<xmpp:note>mod_mam, Tombstones not implemented</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0425.html"/>
|
||||
<xmpp:version>0.3.0</xmpp:version>
|
||||
<xmpp:since>24.06</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_mam</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0431.html"/>
|
||||
<xmpp:version>0.2.0</xmpp:version>
|
||||
<xmpp:since>24.12</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_mam</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0440.html"/>
|
||||
<xmpp:version>0.4.0</xmpp:version>
|
||||
<xmpp:since>24.02</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></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:since>15.06</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_mam</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0474.html"/>
|
||||
<xmpp:version>0.4.0</xmpp:version>
|
||||
<xmpp:since>24.02</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>, 0.4.0 since 25.03</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0480.html"/>
|
||||
<xmpp:version>0.2.0</xmpp:version>
|
||||
<xmpp:since>24.10</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_scram_upgrade</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0484.html"/>
|
||||
<xmpp:version>0.2.0</xmpp:version>
|
||||
<xmpp:since>24.12</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_auth_fast</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0485.html"/>
|
||||
<xmpp:version>0.1.1</xmpp:version>
|
||||
<xmpp:since>25.07</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_pubsub_serverinfo</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0486.html"/>
|
||||
<xmpp:version>0.1.0</xmpp:version>
|
||||
<xmpp:since>24.07</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_muc</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
</Project>
|
||||
</rdf:RDF>
|
||||
|
|
|
@ -9,7 +9,6 @@ Group=@installuser@
|
|||
LimitNOFILE=65536
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
WatchdogSec=30
|
||||
ExecStart=@ctlscriptpath@/ejabberdctl foreground
|
||||
ExecStop=/bin/sh -c '@ctlscriptpath@/ejabberdctl stop && @ctlscriptpath@/ejabberdctl stopped'
|
||||
ExecReload=@ctlscriptpath@/ejabberdctl reload_config
|
||||
|
|
|
@ -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: "::"
|
||||
|
@ -67,7 +67,7 @@ listen:
|
|||
/admin: ejabberd_web_admin
|
||||
/.well-known/acme-challenge: ejabberd_acme
|
||||
-
|
||||
port: 3478
|
||||
port: 5478
|
||||
ip: "::"
|
||||
transport: udp
|
||||
module: ejabberd_stun
|
||||
|
@ -111,11 +111,19 @@ access_rules:
|
|||
|
||||
api_permissions:
|
||||
"console commands":
|
||||
from:
|
||||
- ejabberd_ctl
|
||||
from: ejabberd_ctl
|
||||
who: all
|
||||
what: "*"
|
||||
"admin access":
|
||||
"webadmin commands":
|
||||
from: ejabberd_web_admin
|
||||
who: admin
|
||||
what: "*"
|
||||
"adhoc commands":
|
||||
from: mod_adhoc_api
|
||||
who: admin
|
||||
what: "*"
|
||||
"http access":
|
||||
from: mod_http_api
|
||||
who:
|
||||
access:
|
||||
allow:
|
||||
|
@ -156,6 +164,7 @@ shaper_rules:
|
|||
|
||||
modules:
|
||||
mod_adhoc: {}
|
||||
mod_adhoc_api: {}
|
||||
mod_admin_extra: {}
|
||||
mod_announce:
|
||||
access: announce
|
||||
|
@ -170,7 +179,7 @@ modules:
|
|||
mod_fail2ban: {}
|
||||
mod_http_api: {}
|
||||
mod_http_upload:
|
||||
put_url: https://@HOST@:5443/upload
|
||||
put_url: https://@HOST_URL_ENCODE@:5443/upload
|
||||
custom_headers:
|
||||
"Access-Control-Allow-Origin": "https://@HOST@"
|
||||
"Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS"
|
||||
|
@ -196,6 +205,7 @@ modules:
|
|||
default_room_options:
|
||||
mam: true
|
||||
mod_muc_admin: {}
|
||||
mod_muc_occupantid: {}
|
||||
mod_offline:
|
||||
access_max_user_messages: max_user_offline_messages
|
||||
mod_ping: {}
|
||||
|
@ -224,6 +234,7 @@ modules:
|
|||
ip_access: trusted_network
|
||||
mod_roster:
|
||||
versioning: true
|
||||
mod_s2s_bidi: {}
|
||||
mod_s2s_dialback: {}
|
||||
mod_shared_roster: {}
|
||||
mod_stream_mgmt:
|
||||
|
|
|
@ -108,10 +108,11 @@
|
|||
#.
|
||||
#' 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
|
||||
# all commands using erlang interpreter. This applies to starting
|
||||
# ejabberd server itself but also auxiliary commands like for example
|
||||
# starting debug shell. See erl(1) for list of commands that can be
|
||||
# used here.
|
||||
#
|
||||
# It might be useful to add "-pa /usr/local/lib/ejabberd/ebin" if you
|
||||
# want to add local modules in this path.
|
||||
|
@ -120,6 +121,20 @@
|
|||
#
|
||||
#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.
|
||||
#
|
||||
# For example you can use value "-heart -env HEART_BEAT_TIMEOUT 120 -env ERL_CRASH_DUMP_SECONDS 60"
|
||||
#
|
||||
# Default: ""
|
||||
#
|
||||
#EJABBERD_OPTS=""
|
||||
|
||||
#.
|
||||
#' ERLANG_NODE: Erlang node name
|
||||
#
|
||||
|
@ -183,6 +198,17 @@
|
|||
#
|
||||
#CONTRIB_MODULES_CONF_DIR=/etc/ejabberd/modules
|
||||
|
||||
#.
|
||||
#' CTL_OVER_HTTP: Path to ejabberdctl HTTP listener socket
|
||||
#
|
||||
# To speedup ejabberdctl execution time for ejabberd commands,
|
||||
# you can setup an ejabberd_http listener with ejabberd_ctl handling requests,
|
||||
# listening in a unix domain socket.
|
||||
#
|
||||
# Default: disabled
|
||||
#
|
||||
#CTL_OVER_HTTP=sockets/ctl_over_http.sock
|
||||
|
||||
#.
|
||||
#'
|
||||
# vim: foldmarker=#',#. foldmethod=marker:
|
||||
|
|
|
@ -15,8 +15,8 @@ SCRIPT_DIR="$(cd "$(dirname "$SCRIPT")" && pwd -P)"
|
|||
# shellcheck disable=SC2034
|
||||
ERTS_VSN="{{erts_vsn}}"
|
||||
ERL="{{erl}}"
|
||||
IEX="{{bindir}}/iex"
|
||||
EPMD="{{epmd}}"
|
||||
IEX="{{iexpath}}"
|
||||
INSTALLUSER="{{installuser}}"
|
||||
|
||||
# check the proper system user is used
|
||||
|
@ -66,18 +66,26 @@ done
|
|||
# shellcheck source=ejabberdctl.cfg.example
|
||||
[ -f "$EJABBERDCTL_CONFIG_PATH" ] && . "$EJABBERDCTL_CONFIG_PATH"
|
||||
[ -n "$ERLANG_NODE_ARG" ] && ERLANG_NODE="$ERLANG_NODE_ARG"
|
||||
[ "$ERLANG_NODE" = "${ERLANG_NODE%@*}" ] && ERLANG_NODE="$ERLANG_NODE@$(hostname -s)"
|
||||
[ "$ERLANG_NODE" = "${ERLANG_NODE%.*}" ] && S="-s"
|
||||
: "${SPOOL_DIR:="{{spool_dir}}"}"
|
||||
: "${EJABBERD_LOG_PATH:="$LOGS_DIR/ejabberd.log"}"
|
||||
|
||||
# backward support for old mnesia spool dir path
|
||||
: "${SPOOL_DIR_OLD:="$SPOOL_DIR/$ERLANG_NODE"}"
|
||||
[ -r "$SPOOL_DIR_OLD/schema.DAT" ] && [ ! -r "$SPOOL_DIR/schema.DAT" ] && SPOOL_DIR="$SPOOL_DIR_OLD"
|
||||
|
||||
# define erl parameters
|
||||
ERLANG_OPTS="+K $POLL +P $ERL_PROCESSES $ERL_OPTIONS"
|
||||
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
|
||||
if [ "$(echo "$INET_DIST_INTERFACE2" | grep -o "," | wc -l)" -eq 7 ] ; then
|
||||
INET_DIST_INTERFACE2="$INET_DIST_INTERFACE2 -proto_dist inet6_tcp"
|
||||
fi
|
||||
ERLANG_OPTS="$ERLANG_OPTS -kernel inet_dist_use_interface $INET_DIST_INTERFACE2"
|
||||
fi
|
||||
fi
|
||||
|
@ -89,11 +97,12 @@ ERL_CRASH_DUMP="$LOGS_DIR"/erl_crash_$(date "+%Y%m%d-%H%M%S").dump
|
|||
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_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")"
|
||||
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_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")\
|
||||
$EJABBERD_OPTS"
|
||||
[ -n "$EJABBERD_OPTS" ] && EJABBERD_OPTS="-ejabberd $EJABBERD_OPTS"
|
||||
EJABBERD_OPTS="-mnesia dir \"$SPOOL_DIR\" $MNESIA_OPTIONS $EJABBERD_OPTS -s ejabberd"
|
||||
|
||||
|
@ -121,7 +130,7 @@ set_dist_client()
|
|||
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
|
||||
}
|
||||
|
@ -149,9 +158,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"
|
||||
|
@ -172,8 +183,10 @@ livewarning()
|
|||
echo "Please be extremely cautious with your actions,"
|
||||
echo "and exit immediately if you are not completely sure."
|
||||
echo ""
|
||||
echo "To exit this LIVE mode and stop ejabberd, press:"
|
||||
echo " q(). and press the Enter key"
|
||||
echo "To stop ejabberd gracefully:"
|
||||
echo " ejabberd:stop()."
|
||||
echo "To quit erlang immediately, press:"
|
||||
echo " control+g and then q"
|
||||
echo ""
|
||||
echo "--------------------------------------------------------------------"
|
||||
echo "To bypass permanently this warning, add to ejabberdctl.cfg the line:"
|
||||
|
@ -184,6 +197,39 @@ livewarning()
|
|||
fi
|
||||
}
|
||||
|
||||
check_etop_result()
|
||||
{
|
||||
result=$?
|
||||
if [ $result -eq 1 ] ; then
|
||||
echo ""
|
||||
echo "It seems there was some problem running 'ejabberdctl etop'."
|
||||
echo "Is the error message something like this?"
|
||||
echo " Failed to load module 'etop' because it cannot be found..."
|
||||
echo "Then probably ejabberd was compiled with development tools disabled."
|
||||
echo "To use 'etop', recompile ejabberd with: ./configure --enable-tools"
|
||||
echo ""
|
||||
exit $result
|
||||
fi
|
||||
}
|
||||
|
||||
check_iex_result()
|
||||
{
|
||||
result=$?
|
||||
if [ $result -eq 127 ] ; then
|
||||
echo ""
|
||||
echo "It seems there was some problem finding 'iex' binary from Elixir."
|
||||
echo "Probably ejabberd was compiled with Rebar3 and Elixir disabled, like:"
|
||||
echo " ./configure"
|
||||
echo "which is equivalent to:"
|
||||
echo " ./configure --with-rebar=rebar3 --disable-elixir"
|
||||
echo "To use 'iex', recompile ejabberd enabling Elixir or using Mix:"
|
||||
echo " ./configure --enable-elixir"
|
||||
echo " ./configure --with-rebar=mix"
|
||||
echo ""
|
||||
exit $result
|
||||
fi
|
||||
}
|
||||
|
||||
help()
|
||||
{
|
||||
echo ""
|
||||
|
@ -212,16 +258,34 @@ help()
|
|||
}
|
||||
|
||||
# dynamic node name helper
|
||||
uid()
|
||||
{
|
||||
uuid=$(uuidgen 2>/dev/null)
|
||||
random=$(awk 'BEGIN { srand(); print int(rand()*32768) }' /dev/null)
|
||||
[ -z "$uuid" ] && [ -f /proc/sys/kernel/random/uuid ] && uuid=$(cat /proc/sys/kernel/random/uuid)
|
||||
[ -z "$uuid" ] && uuid=$(printf "%X" "${random:-$$}$(date +%M%S)")
|
||||
uuid=$(printf '%s' $uuid | sed 's/^\(...\).*$/\1/')
|
||||
[ $# -eq 0 ] && echo "${uuid}-${ERLANG_NODE}"
|
||||
[ $# -eq 1 ] && echo "${uuid}-${1}-${ERLANG_NODE}"
|
||||
[ $# -eq 2 ] && echo "${uuid}-${1}@${2}"
|
||||
uid() {
|
||||
ERTSVERSION="$("$ERL" -version 2>&1 | sed 's|.* \([0-9]*[0-9]\).*|\1|g')"
|
||||
if [ $ERTSVERSION -lt 11 ] ; then # otp 23.0 includes erts 11.0
|
||||
# Erlang/OTP lower than 23, which doesn's support dynamic node code
|
||||
N=1
|
||||
PF=$(( $$ % 97 ))
|
||||
while
|
||||
case $# in
|
||||
0) NN="${PF}-${N}-${ERLANG_NODE}"
|
||||
;;
|
||||
1) NN="${PF}-${N}-${1}-${ERLANG_NODE}"
|
||||
;;
|
||||
2) NN="${PF}-${N}-${1}@${2}"
|
||||
;;
|
||||
esac
|
||||
N=$(( N + 1 + ( $$ % 5 ) ))
|
||||
"$EPMD" -names 2>/dev/null | grep -q " ${NN%@*} "
|
||||
do :; done
|
||||
echo $NN
|
||||
else
|
||||
# Erlang/OTP 23 or higher: use native dynamic node code
|
||||
# https://www.erlang.org/patches/otp-23.0#OTP-13812
|
||||
if [ "$ERLANG_NODE" != "${ERLANG_NODE%.*}" ]; then
|
||||
echo "undefined@${ERLANG_NODE#*@}"
|
||||
else
|
||||
echo "undefined"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# stop epmd if there is no other running node
|
||||
|
@ -254,6 +318,13 @@ check_start()
|
|||
# allow sync calls
|
||||
wait_status()
|
||||
{
|
||||
wait_status_node "$ERLANG_NODE" $1 $2 $3
|
||||
}
|
||||
|
||||
wait_status_node()
|
||||
{
|
||||
CONNECT_NODE=$1
|
||||
shift
|
||||
# args: status try delay
|
||||
# return: 0 OK, 1 KO
|
||||
timeout="$2"
|
||||
|
@ -264,14 +335,71 @@ wait_status()
|
|||
if [ $timeout -eq 0 ] ; then
|
||||
status="$1"
|
||||
else
|
||||
exec_erl "$(uid ctl)" -hidden -noinput -s ejabberd_ctl \
|
||||
-extra "$ERLANG_NODE" $NO_TIMEOUT status > /dev/null
|
||||
exec_erl "$(uid ctl)" -hidden -noinput \
|
||||
-eval 'net_kernel:connect_node('"'$CONNECT_NODE'"')' \
|
||||
-s ejabberd_ctl \
|
||||
-extra "$CONNECT_NODE" $NO_TIMEOUT status > /dev/null
|
||||
status="$?"
|
||||
fi
|
||||
done
|
||||
[ $timeout -gt 0 ]
|
||||
}
|
||||
|
||||
exec_other_command()
|
||||
{
|
||||
exec_other_command_node $ERLANG_NODE "$@"
|
||||
}
|
||||
|
||||
exec_other_command_node()
|
||||
{
|
||||
CONNECT_NODE=$1
|
||||
shift
|
||||
if [ -z "$CTL_OVER_HTTP" ] || [ ! -S "$CTL_OVER_HTTP" ] \
|
||||
|| [ ! -x "$(command -v curl)" ] || [ -z "$1" ] || [ "$1" = "help" ] \
|
||||
|| [ "$1" = "mnesia_info_ctl" ]|| [ "$1" = "print_sql_schema" ] ; then
|
||||
exec_erl "$(uid ctl)" -hidden -noinput \
|
||||
-eval 'net_kernel:connect_node('"'$CONNECT_NODE'"')' \
|
||||
-s ejabberd_ctl \
|
||||
-extra "$CONNECT_NODE" $NO_TIMEOUT "$@"
|
||||
result=$?
|
||||
case $result in
|
||||
3) help;;
|
||||
*) :;;
|
||||
esac
|
||||
return $result
|
||||
else
|
||||
exec_ctl_over_http_socket "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
exec_ctl_over_http_socket()
|
||||
{
|
||||
COMMAND=${1}
|
||||
CARGS=""
|
||||
while [ $# -gt 0 ]; do
|
||||
[ -z "$CARGS" ] && CARGS="[" || CARGS="${CARGS}, "
|
||||
CARGS="${CARGS}\"$1\""
|
||||
shift
|
||||
done
|
||||
CARGS="${CARGS}]"
|
||||
TEMPHEADERS=temp-headers.log
|
||||
curl \
|
||||
--unix-socket ${CTL_OVER_HTTP} \
|
||||
--header "Content-Type: application/json" \
|
||||
--header "Accept: application/json" \
|
||||
--data "${CARGS}" \
|
||||
--dump-header ${TEMPHEADERS} \
|
||||
--no-progress-meter \
|
||||
"http://localhost/ctl/${COMMAND}"
|
||||
result=$(sed -n 's/.*status-code: \([0-9]*\).*/\1/p' < $TEMPHEADERS)
|
||||
rm ${TEMPHEADERS}
|
||||
case $result in
|
||||
2|3) exec_other_command help ${COMMAND};;
|
||||
*) :;;
|
||||
esac
|
||||
exit $result
|
||||
}
|
||||
|
||||
# ensure we can change current directory to SPOOL_DIR
|
||||
[ -d "$SPOOL_DIR" ] || exec_cmd mkdir -p "$SPOOL_DIR"
|
||||
cd "$SPOOL_DIR" || {
|
||||
|
@ -279,6 +407,103 @@ cd "$SPOOL_DIR" || {
|
|||
exit 6
|
||||
}
|
||||
|
||||
printe()
|
||||
{
|
||||
printf "\n"
|
||||
printf "\e[1;40;32m==> %s\e[0m\n" "$1"
|
||||
}
|
||||
|
||||
## Function copied from tools/make-installers
|
||||
user_agrees()
|
||||
{
|
||||
question="$*"
|
||||
|
||||
if [ -t 0 ]
|
||||
then
|
||||
printe "$question (y/n) [n]"
|
||||
read -r response
|
||||
case "$response" in
|
||||
[Yy]|[Yy][Ee][Ss])
|
||||
return 0
|
||||
;;
|
||||
[Nn]|[Nn][Oo]|'')
|
||||
return 1
|
||||
;;
|
||||
*)
|
||||
echo 'Please respond with "yes" or "no".'
|
||||
user_agrees "$question"
|
||||
;;
|
||||
esac
|
||||
else # Assume 'yes' if not running interactively.
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
mnesia_change()
|
||||
{
|
||||
ERLANG_NODE_OLD="$1"
|
||||
[ "$ERLANG_NODE_OLD" = "" ] \
|
||||
&& echo "Error: Please provide the old erlang node name, for example:" \
|
||||
&& echo " ejabberdctl mnesia_change ejabberd@oldmachine" \
|
||||
&& exit 1
|
||||
|
||||
SPOOL_DIR_BACKUP=$SPOOL_DIR/$ERLANG_NODE_OLD-backup/
|
||||
OLDFILE=$SPOOL_DIR_BACKUP/$ERLANG_NODE_OLD.backup
|
||||
NEWFILE=$SPOOL_DIR_BACKUP/$ERLANG_NODE.backup
|
||||
|
||||
printe "This changes your mnesia database from node name '$ERLANG_NODE_OLD' to '$ERLANG_NODE'"
|
||||
|
||||
[ -d "$SPOOL_DIR_BACKUP" ] && printe "WARNING! A backup of old node already exists in $SPOOL_DIR_BACKUP"
|
||||
|
||||
if ! user_agrees "Do you want to proceed?"
|
||||
then
|
||||
echo 'Operation aborted.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
printe "Starting ejabberd with old node name $ERLANG_NODE_OLD ..."
|
||||
exec_erl "$ERLANG_NODE_OLD" $EJABBERD_OPTS -detached
|
||||
wait_status_node $ERLANG_NODE_OLD 0 30 2
|
||||
result=$?
|
||||
case $result in
|
||||
1) echo "There was a problem starting ejabberd with the old erlang node name. " \
|
||||
&& echo "Check for log errors in $EJABBERD_LOG_PATH" \
|
||||
&& exit $result;;
|
||||
*) :;;
|
||||
esac
|
||||
exec_other_command_node $ERLANG_NODE_OLD "status"
|
||||
|
||||
printe "Making backup of old database to file $OLDFILE ..."
|
||||
mkdir $SPOOL_DIR_BACKUP
|
||||
exec_other_command_node $ERLANG_NODE_OLD backup "$OLDFILE"
|
||||
|
||||
printe "Changing node name in new backup file $NEWFILE ..."
|
||||
exec_other_command_node $ERLANG_NODE_OLD mnesia_change_nodename "$ERLANG_NODE_OLD" "$ERLANG_NODE" "$OLDFILE" "$NEWFILE"
|
||||
|
||||
printe "Stopping old ejabberd..."
|
||||
exec_other_command_node $ERLANG_NODE_OLD "stop"
|
||||
wait_status_node $ERLANG_NODE_OLD 3 30 2 && stop_epmd
|
||||
|
||||
printe "Moving old mnesia spool files to backup subdirectory $SPOOL_DIR_BACKUP ..."
|
||||
mv $SPOOL_DIR/*.DAT $SPOOL_DIR_BACKUP
|
||||
mv $SPOOL_DIR/*.DCD $SPOOL_DIR_BACKUP
|
||||
mv $SPOOL_DIR/*.LOG $SPOOL_DIR_BACKUP
|
||||
|
||||
printe "Starting ejabberd with new node name $ERLANG_NODE ..."
|
||||
exec_erl "$ERLANG_NODE" $EJABBERD_OPTS -detached
|
||||
wait_status 0 30 2
|
||||
exec_other_command "status"
|
||||
|
||||
printe "Installing fallback of new mnesia..."
|
||||
exec_other_command install_fallback "$NEWFILE"
|
||||
|
||||
printe "Stopping new ejabberd..."
|
||||
exec_other_command "stop"
|
||||
wait_status 3 30 2 && stop_epmd
|
||||
|
||||
printe "Finished, now you can start ejabberd normally"
|
||||
}
|
||||
|
||||
# main
|
||||
case $1 in
|
||||
start)
|
||||
|
@ -305,25 +530,31 @@ case $1 in
|
|||
;;
|
||||
etop)
|
||||
set_dist_client
|
||||
exec_erl "$(uid top)" -hidden -node "$ERLANG_NODE" -s etop \
|
||||
-s erlang halt -output text
|
||||
exec_erl "$(uid top)" -hidden -remsh "$ERLANG_NODE" -s etop \
|
||||
-output text
|
||||
check_etop_result
|
||||
;;
|
||||
iexdebug)
|
||||
debugwarning
|
||||
set_dist_client
|
||||
exec_iex "$(uid debug)" --remsh "$ERLANG_NODE"
|
||||
check_iex_result
|
||||
;;
|
||||
iexlive)
|
||||
livewarning
|
||||
exec_iex "$ERLANG_NODE" --erl "$EJABBERD_OPTS" --app ejabberd
|
||||
exec_iex "$ERLANG_NODE" --erl "$EJABBERD_OPTS"
|
||||
check_iex_result
|
||||
;;
|
||||
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
|
||||
-noinput -hidden \
|
||||
-eval 'net_kernel:connect_node('"'$PEER'"')' \
|
||||
-eval 'io:format("~p~n",[net_adm:ping('"'$PEER'"')])' \
|
||||
-eval 'halt(case net_adm:ping('"'$PEER'"') of pong -> 0; pang -> 1 end).' \
|
||||
-output text
|
||||
;;
|
||||
started)
|
||||
set_dist_client
|
||||
|
@ -333,15 +564,11 @@ case $1 in
|
|||
set_dist_client
|
||||
wait_status 3 30 2 && stop_epmd # wait 30x2s before timeout
|
||||
;;
|
||||
mnesia_change)
|
||||
mnesia_change $2
|
||||
;;
|
||||
*)
|
||||
set_dist_client
|
||||
exec_erl "$(uid ctl)" -hidden -noinput -s ejabberd_ctl \
|
||||
-extra "$ERLANG_NODE" $NO_TIMEOUT "$@"
|
||||
result=$?
|
||||
case $result in
|
||||
2|3) help;;
|
||||
*) :;;
|
||||
esac
|
||||
exit $result
|
||||
exec_other_command "$@"
|
||||
;;
|
||||
esac
|
||||
|
|
53
elvis.config
53
elvis.config
|
@ -5,38 +5,55 @@
|
|||
{config,
|
||||
[#{dirs => ["src"],
|
||||
filter => "*.erl",
|
||||
ignore => ['ELDAPv3', eldap_filter_yecc],
|
||||
ruleset => erl_files,
|
||||
rules => [{elvis_style, line_length, #{limit => 100,
|
||||
skip_comments => false}},
|
||||
rules => [{elvis_text_style, line_length, #{limit => 1000, skip_comments => false}},
|
||||
{elvis_text_style, no_tabs, disable},
|
||||
{elvis_style, no_debug_call, disable},
|
||||
{elvis_style, operator_spaces, disable},
|
||||
{elvis_style, atom_naming_convention, disable},
|
||||
{elvis_style, consistent_variable_casing, disable},
|
||||
{elvis_style, dont_repeat_yourself, #{min_complexity => 70}},
|
||||
{elvis_style, export_used_types, disable},
|
||||
{elvis_style, function_naming_convention, disable},
|
||||
{elvis_style, god_modules, #{limit => 300}},
|
||||
{elvis_style, invalid_dynamic_call, disable},
|
||||
{elvis_style, variable_naming_convention, #{ regex => ".*" }},
|
||||
{elvis_style, dont_repeat_yourself, #{min_complexity => 20}}
|
||||
{elvis_style, macro_names, disable},
|
||||
{elvis_style, max_function_arity, disable}, % #{max_arity => 15}},
|
||||
{elvis_style, nesting_level, disable},
|
||||
{elvis_style, no_author, disable},
|
||||
{elvis_style, no_boolean_in_comparison, disable},
|
||||
{elvis_style, no_catch_expressions, disable},
|
||||
{elvis_style, no_debug_call, disable},
|
||||
{elvis_style, no_if_expression, disable},
|
||||
{elvis_style, no_import, disable},
|
||||
{elvis_style, no_nested_try_catch, disable},
|
||||
{elvis_style, no_operation_on_same_value, disable},
|
||||
{elvis_style, no_receive_without_timeout, disable},
|
||||
{elvis_style, no_single_clause_case, disable},
|
||||
{elvis_style, no_spec_with_records, disable},
|
||||
{elvis_style, no_throw, disable},
|
||||
{elvis_style, operator_spaces, disable},
|
||||
{elvis_style, param_pattern_matching, disable},
|
||||
{elvis_style, private_data_types, disable},
|
||||
{elvis_style, variable_naming_convention, disable}
|
||||
]
|
||||
},
|
||||
|
||||
%#{dirs => ["include"],
|
||||
% filter => "*.hrl",
|
||||
% ruleset => hrl_files},
|
||||
|
||||
#{dirs => ["."],
|
||||
filter => "Makefile.in",
|
||||
ruleset => makefiles,
|
||||
rules => [{elvis_style, line_length, #{limit => 100,
|
||||
rules => [{elvis_text_style, line_length, #{limit => 400,
|
||||
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}}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
].
|
||||
|
||||
%% vim: set filetype=erlang tabstop=8:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
otp_path: "/usr/lib/erlang"
|
||||
plt_path: "_build/default/rebar3_24.3.3_plt"
|
||||
#otp_path: "/usr/lib/erlang"
|
||||
#plt_path: "_build/default/rebar3_24.3.3_plt"
|
||||
#code_reload:
|
||||
# node: ejabberd@localhost
|
||||
apps_dirs:
|
||||
|
@ -14,12 +14,12 @@ macros:
|
|||
- name: DEPRECATED_GET_STACKTRACE
|
||||
- name: HAVE_ERL_ERROR
|
||||
- name: HAVE_URI_STRING
|
||||
- name: OTP_BELOW_25
|
||||
- name: OTP_BELOW_27
|
||||
- name: SIP
|
||||
- name: STUN
|
||||
diagnostics:
|
||||
# enabled:
|
||||
# - crossref
|
||||
enabled:
|
||||
- crossref
|
||||
disabled:
|
||||
# - dialyzer
|
||||
- unused_includes # Otherwise it complains about unused logger.hrl
|
||||
|
|
|
@ -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;
|
|
@ -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
|
|
@ -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'
|
|
@ -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:
|
|
@ -1,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
@ -18,5 +18,5 @@
|
|||
%%%
|
||||
%%%----------------------------------------------------------------------
|
||||
|
||||
-record(passwd, {us = {<<"">>, <<"">>} :: {binary(), binary()} | '$1',
|
||||
-record(passwd, {us = {<<"">>, <<"">>} :: {binary(), binary()} | {binary(), binary(), atom()} | '$1',
|
||||
password = <<"">> :: binary() | scram() | '_'}).
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
@ -19,13 +19,30 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
|
||||
-type aterm() :: {atom(), atype()}.
|
||||
-type atype() :: integer | string | binary |
|
||||
-type atype() :: integer | string | binary | any | atom |
|
||||
{tuple, [aterm()]} | {list, aterm()}.
|
||||
-type rterm() :: {atom(), rtype()}.
|
||||
-type rtype() :: integer | string | atom |
|
||||
-type rtype() :: integer | string | atom | any |
|
||||
{tuple, [rterm()]} | {list, rterm()} |
|
||||
rescode | restuple.
|
||||
|
||||
%% The 'any' and 'atom' argument types and 'any' result type
|
||||
%% should only be used %% by commands with tag 'internal',
|
||||
%% which are meant to be used only internally in ejabberd,
|
||||
%% and not called using external frontends.
|
||||
|
||||
%% The purpose of a command can either be:
|
||||
%% - informative: its purpose is to obtain information
|
||||
%% - modifier: its purpose is to produce some change in the server
|
||||
%%
|
||||
%% A modifier command should be designed just to produce its desired side-effect,
|
||||
%% and its result term should just be success or failure: rescode or restuple.
|
||||
%%
|
||||
%% ejabberd_web_admin:make_command/2 considers that commands
|
||||
%% with result type different than rescode or restuple
|
||||
%% are commands that can be safely executed automatically
|
||||
%% to get information and build the web page.
|
||||
|
||||
-type oauth_scope() :: atom().
|
||||
|
||||
%% ejabberd_commands OAuth ReST ACL definition:
|
||||
|
@ -67,42 +84,24 @@
|
|||
args_example = none :: none | [any()] | '_',
|
||||
result_example = none :: any()}).
|
||||
|
||||
%% TODO Fix me: Type is not up to date
|
||||
-type ejabberd_commands() :: #ejabberd_commands{name :: atom(),
|
||||
tags :: [atom()],
|
||||
desc :: string(),
|
||||
longdesc :: string(),
|
||||
version :: integer(),
|
||||
note :: string(),
|
||||
weight :: integer(),
|
||||
module :: atom(),
|
||||
function :: atom(),
|
||||
args :: [aterm()],
|
||||
policy :: open | restricted | admin | user,
|
||||
access :: [{atom(),atom(),atom()}|atom()],
|
||||
result :: rterm()}.
|
||||
definer :: atom(),
|
||||
result :: rterm(),
|
||||
args_rename :: [{atom(),atom()}],
|
||||
args_desc :: none | [string()] | '_',
|
||||
result_desc :: none | string() | '_',
|
||||
args_example :: none | [any()] | '_',
|
||||
result_example :: any()
|
||||
}.
|
||||
|
||||
%% @type ejabberd_commands() = #ejabberd_commands{
|
||||
%% name = atom(),
|
||||
%% tags = [atom()],
|
||||
%% desc = string(),
|
||||
%% longdesc = string(),
|
||||
%% module = atom(),
|
||||
%% function = atom(),
|
||||
%% args = [aterm()],
|
||||
%% result = rterm()
|
||||
%% }.
|
||||
%% desc: Description of the command
|
||||
%% args: Describe the accepted arguments.
|
||||
%% This way the function that calls the command can format the
|
||||
%% arguments before calling.
|
||||
|
||||
%% @type atype() = integer | string | {tuple, [aterm()]} | {list, aterm()}.
|
||||
%% Allowed types for arguments are integer, string, tuple and list.
|
||||
|
||||
%% @type rtype() = integer | string | atom | {tuple, [rterm()]} | {list, rterm()} | rescode | restuple.
|
||||
%% A rtype is either an atom or a tuple with two elements.
|
||||
|
||||
%% @type aterm() = {Name::atom(), Type::atype()}.
|
||||
%% An argument term is a tuple with the term name and the term type.
|
||||
|
||||
%% @type rterm() = {Name::atom(), Type::rtype()}.
|
||||
%% A result term is a tuple with the term name and the term type.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,26 @@
|
|||
boolean :: fun((boolean()) -> binary()),
|
||||
in_array_string :: fun((binary()) -> binary()),
|
||||
like_escape :: fun(() -> binary())}).
|
||||
|
||||
|
||||
-record(sql_index, {columns,
|
||||
unique = false :: boolean(),
|
||||
meta = #{}}).
|
||||
-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()}).
|
||||
|
||||
-record(sql_schema_info,
|
||||
{db_type :: pgsql | mysql | sqlite,
|
||||
db_version :: any(),
|
||||
new_schema = true :: boolean()}).
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +62,11 @@
|
|||
[{<<"type">>, Type}, {<<"name">>, Name},
|
||||
{<<"value">>, Value}])).
|
||||
|
||||
-define(INPUTPH(Type, Name, Value, PlaceHolder),
|
||||
?XA(<<"input">>,
|
||||
[{<<"type">>, Type}, {<<"name">>, Name},
|
||||
{<<"value">>, Value}, {<<"placeholder">>, PlaceHolder}])).
|
||||
|
||||
-define(INPUTT(Type, Name, Value),
|
||||
?INPUT(Type, Name, (translate:translate(Lang, Value)))).
|
||||
|
||||
|
@ -95,16 +100,27 @@
|
|||
-define(XRES(Text),
|
||||
?XAC(<<"p">>, [{<<"class">>, <<"result">>}], Text)).
|
||||
|
||||
-define(DIVRES(Elements),
|
||||
?XAE(<<"div">>, [{<<"class">>, <<"result">>}], Elements)).
|
||||
|
||||
%% Guide Link
|
||||
-define(XREST(Text), ?XRES((translate:translate(Lang, Text)))).
|
||||
|
||||
-define(GL(Ref, Title),
|
||||
?XAE(<<"div">>, [{<<"class">>, <<"guidelink">>}],
|
||||
[?XAE(<<"a">>,
|
||||
[{<<"href">>, <<"https://docs.ejabberd.im/admin/configuration/", Ref/binary>>},
|
||||
[{<<"href">>, <<"https://docs.ejabberd.im/", Ref/binary>>},
|
||||
{<<"target">>, <<"_blank">>}],
|
||||
[?C(<<"docs: ", Title/binary>>)])])).
|
||||
|
||||
%% h1 with a Guide Link
|
||||
-define(H1GL(Name, Ref, Title),
|
||||
[?XC(<<"h1">>, Name), ?GL(Ref, Title)]).
|
||||
-define(H1GLraw(Name, Ref, Title),
|
||||
[?XC(<<"h1">>, Name), ?GL(Ref, Title), ?BR, ?BR]).
|
||||
-define(H1GL(Name, RefConf, Title),
|
||||
?H1GLraw(Name, <<"admin/configuration/", RefConf/binary>>, Title)).
|
||||
|
||||
-define(ANCHORL(Ref),
|
||||
?XAE(<<"div">>, [{<<"class">>, <<"anchorlink">>}],
|
||||
[?XAE(<<"a">>,
|
||||
[{<<"href">>, <<"#", Ref/binary>>}],
|
||||
[?C(unicode:characters_to_binary("¶"))])])).
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
@ -39,20 +39,46 @@
|
|||
-else.
|
||||
-include_lib("kernel/include/logger.hrl").
|
||||
|
||||
-define(CLEAD, "\e[1"). % bold
|
||||
-define(CMID, "\e[0"). % normal
|
||||
-define(CCLEAN, "\e[0m"). % clean
|
||||
|
||||
-define(CDEFAULT, ";49;95m"). % light magenta
|
||||
-define(CDEBUG, ";49;90m"). % dark gray
|
||||
-define(CINFO, ";49;92m"). % green
|
||||
-define(CWARNING, ";49;93m"). % light yellow
|
||||
-define(CERROR, ";49;91m"). % light magenta
|
||||
-define(CCRITICAL,";49;31m"). % light red
|
||||
|
||||
-define(DEBUG(Format, Args),
|
||||
begin ?LOG_DEBUG(Format, Args), ok end).
|
||||
begin ?LOG_DEBUG(Format, Args,
|
||||
#{clevel => ?CLEAD ++ ?CDEBUG,
|
||||
ctext => ?CMID ++ ?CDEBUG}),
|
||||
ok end).
|
||||
|
||||
-define(INFO_MSG(Format, Args),
|
||||
begin ?LOG_INFO(Format, Args), ok end).
|
||||
begin ?LOG_INFO(Format, Args,
|
||||
#{clevel => ?CLEAD ++ ?CINFO,
|
||||
ctext => ?CCLEAN}),
|
||||
ok end).
|
||||
|
||||
-define(WARNING_MSG(Format, Args),
|
||||
begin ?LOG_WARNING(Format, Args), ok end).
|
||||
begin ?LOG_WARNING(Format, Args,
|
||||
#{clevel => ?CLEAD ++ ?CWARNING,
|
||||
ctext => ?CMID ++ ?CWARNING}),
|
||||
ok end).
|
||||
|
||||
-define(ERROR_MSG(Format, Args),
|
||||
begin ?LOG_ERROR(Format, Args), ok end).
|
||||
begin ?LOG_ERROR(Format, Args,
|
||||
#{clevel => ?CLEAD ++ ?CERROR,
|
||||
ctext => ?CMID ++ ?CERROR}),
|
||||
ok end).
|
||||
|
||||
-define(CRITICAL_MSG(Format, Args),
|
||||
begin ?LOG_CRITICAL(Format, Args), ok end).
|
||||
begin ?LOG_CRITICAL(Format, Args,
|
||||
#{clevel => ?CLEAD++ ?CCRITICAL,
|
||||
ctext => ?CMID ++ ?CCRITICAL}),
|
||||
ok end).
|
||||
-endif.
|
||||
|
||||
%% Use only when trying to troubleshoot test problem with ExUnit
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
@ -18,10 +18,19 @@
|
|||
%%%
|
||||
%%%----------------------------------------------------------------------
|
||||
|
||||
-ifdef(DEPRECATED_GET_STACKTRACE).
|
||||
-define(EX_RULE(Class, Reason, Stack), Class:Reason:Stack).
|
||||
-define(EX_STACK(Stack), Stack).
|
||||
-else.
|
||||
-define(EX_RULE(Class, Reason, _), Class:Reason).
|
||||
-define(EX_STACK(_), erlang:get_stacktrace()).
|
||||
-endif.
|
||||
-define(MODULE_ANTISPAM, mod_antispam).
|
||||
|
||||
-type url() :: binary().
|
||||
-type filename() :: binary() | none | false.
|
||||
-type jid_set() :: sets:set(ljid()).
|
||||
-type url_set() :: sets:set(url()).
|
||||
|
||||
-define(DEFAULT_RTBL_DOMAINS_NODE, <<"spam_source_domains">>).
|
||||
|
||||
-record(rtbl_service,
|
||||
{host = none :: binary() | none,
|
||||
node = ?DEFAULT_RTBL_DOMAINS_NODE :: binary(),
|
||||
subscribed = false :: boolean(),
|
||||
retry_timer = undefined :: reference() | undefined}).
|
||||
|
||||
-type rtbl_service() :: #rtbl_service{}.
|
|
@ -1,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
@ -26,7 +26,8 @@
|
|||
bare_peer = {<<"">>, <<"">>, <<"">>} :: ljid(),
|
||||
packet = #xmlel{} :: xmlel() | message(),
|
||||
nick = <<"">> :: binary(),
|
||||
type = chat :: chat | groupchat}).
|
||||
type = chat :: chat | groupchat,
|
||||
origin_id = <<"">> :: binary()}).
|
||||
|
||||
-record(archive_prefs,
|
||||
{us = {<<"">>, <<"">>} :: {binary(), binary()},
|
||||
|
|
36
include/mod_matrix_gw.hrl
Normal file
36
include/mod_matrix_gw.hrl
Normal file
|
@ -0,0 +1,36 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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(room_version,
|
||||
{id :: binary(),
|
||||
%% use the same field names as in Synapse
|
||||
enforce_key_validity :: boolean(),
|
||||
special_case_aliases_auth :: boolean(),
|
||||
strict_canonicaljson :: boolean(),
|
||||
limit_notifications_power_levels :: boolean(),
|
||||
knock_join_rule :: boolean(),
|
||||
restricted_join_rule :: boolean(),
|
||||
restricted_join_rule_fix :: boolean(),
|
||||
knock_restricted_join_rule :: boolean(),
|
||||
enforce_int_power_levels :: boolean(),
|
||||
implicit_room_creator :: boolean(),
|
||||
updated_redaction_rules :: boolean(),
|
||||
hydra :: boolean()
|
||||
}).
|
|
@ -1,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,13 +38,13 @@
|
|||
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(),
|
||||
public = true :: boolean(),
|
||||
public_list = true :: boolean(),
|
||||
persistent = false :: boolean(),
|
||||
persistent = false :: boolean() | {destroying, boolean()},
|
||||
moderated = true :: boolean(),
|
||||
captcha_protected = false :: boolean(),
|
||||
members_by_default = true :: boolean(),
|
||||
|
@ -125,8 +125,9 @@
|
|||
roles = #{} :: roles(),
|
||||
history = #lqueue{} :: lqueue(),
|
||||
subject = [] :: [text()],
|
||||
subject_author = <<"">> :: binary(),
|
||||
hats_users = #{} :: map(), % FIXME on OTP 21+: #{ljid() => #{binary() => binary()}},
|
||||
subject_author = {<<"">>, #jid{}} :: {binary(), jid()},
|
||||
hats_defs = #{} :: #{binary() => {binary(), binary()}},
|
||||
hats_users = #{} :: #{ljid() => [binary()]},
|
||||
just_created = erlang:system_time(microsecond) :: true | integer(),
|
||||
activity = treap:empty() :: treap:treap(),
|
||||
room_shaper = none :: ejabberd_shaper:shaper(),
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,7 +2,7 @@
|
|||
%%% RFC 1928 constants.
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,5 +1,5 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%% ejabberd, Copyright (C) 2017-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2017-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%-------------------------------------------------------------------
|
||||
%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||
%%% @copyright (C) 2002-2023 ProcessOne, SARL. All Rights Reserved.
|
||||
%%% @copyright (C) 2002-2025 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,6 +1,6 @@
|
|||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2023 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
|
0
install-sh
Normal file → Executable file
0
install-sh
Normal file → Executable file
|
@ -41,7 +41,7 @@ defmodule Ejabberd.Config.Attr do
|
|||
"""
|
||||
@spec validate([attr]) :: [{:ok, attr}] | [{:error, attr, atom()}]
|
||||
def validate(attrs) when is_list(attrs), do: Enum.map(attrs, &valid_attr?/1)
|
||||
def validate(attr), do: validate([attr]) |> List.first
|
||||
def validate(attr), do: validate([attr])
|
||||
|
||||
@doc """
|
||||
Returns the type of an attribute, given its name.
|
||||
|
|
|
@ -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)
|
||||
|
@ -105,11 +105,8 @@ defmodule Ejabberd.Config do
|
|||
Code.eval_file(file_path) |> extract_and_store_module_name()
|
||||
|
||||
# Getting start/0 config
|
||||
Ejabberd.Config.Store.get(:module_name)
|
||||
|> case do
|
||||
nil -> IO.puts "[ ERR ] Configuration module not found."
|
||||
[module] -> call_start_func_and_store_data(module)
|
||||
end
|
||||
[module] = Ejabberd.Config.Store.get(:module_name)
|
||||
call_start_func_and_store_data(module)
|
||||
|
||||
# Fetching git modules and install them
|
||||
get_modules_parsed_in_order()
|
||||
|
|
|
@ -13,7 +13,6 @@ defmodule Ejabberd.Config.EjabberdHook do
|
|||
@doc """
|
||||
Register a hook to ejabberd.
|
||||
"""
|
||||
@spec start(EjabberdHook.t) :: none
|
||||
def start(%EjabberdHook{hook: hook, opts: opts, fun: fun}) do
|
||||
host = Keyword.get(opts, :host, :global)
|
||||
priority = Keyword.get(opts, :priority, 50)
|
||||
|
|
|
@ -7,12 +7,13 @@ defmodule Ejabberd.Config.EjabberdModule do
|
|||
the already existing Elixir.Module.
|
||||
"""
|
||||
|
||||
@type t :: %{module: atom, attrs: [Attr.t]}
|
||||
|
||||
defstruct [:module, :attrs]
|
||||
|
||||
alias Ejabberd.Config.EjabberdModule
|
||||
alias Ejabberd.Config.Validation
|
||||
alias Ejabberd.Config.Attr
|
||||
|
||||
@type t :: %{module: atom, attrs: [Attr.attr]}
|
||||
|
||||
defstruct [:module, :attrs]
|
||||
|
||||
@doc """
|
||||
Given a list of modules / single module
|
||||
|
@ -29,7 +30,6 @@ defmodule Ejabberd.Config.EjabberdModule do
|
|||
a git attribute and tries to fetch the repo,
|
||||
then, it install them through :ext_mod.install/1
|
||||
"""
|
||||
@spec fetch_git_repos([EjabberdModule.t]) :: none()
|
||||
def fetch_git_repos(modules) do
|
||||
modules
|
||||
|> Enum.filter(&is_git_module?/1)
|
||||
|
@ -60,7 +60,7 @@ defmodule Ejabberd.Config.EjabberdModule do
|
|||
defp fetch_and_store_repo_source_if_not_exists(path, repo) do
|
||||
unless File.exists?(path) do
|
||||
IO.puts "[info] Fetching: #{repo}"
|
||||
:os.cmd('git clone #{repo} #{path}')
|
||||
:os.cmd(~c"git clone #{repo} #{path}")
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -14,15 +14,12 @@ defmodule Ejabberd.Config.OptsFormatter do
|
|||
Look at how Config.get_ejabberd_opts/0 is constructed for
|
||||
more informations.
|
||||
"""
|
||||
@spec format_opts_for_ejabberd([{atom(), any()}]) :: list()
|
||||
@spec format_opts_for_ejabberd(map) :: list()
|
||||
def format_opts_for_ejabberd(opts) do
|
||||
opts
|
||||
|> format_attrs_for_ejabberd
|
||||
end
|
||||
|
||||
defp format_attrs_for_ejabberd(opts) when is_list(opts),
|
||||
do: (Enum.map opts, &format_attrs_for_ejabberd/1)
|
||||
|
||||
defp format_attrs_for_ejabberd({:listeners, mods}),
|
||||
do: {:listen, format_listeners_for_ejabberd(mods)}
|
||||
|
||||
|
@ -32,6 +29,9 @@ defmodule Ejabberd.Config.OptsFormatter do
|
|||
defp format_attrs_for_ejabberd({key, opts}) when is_atom(key),
|
||||
do: {key, opts}
|
||||
|
||||
defp format_attrs_for_ejabberd(opts),
|
||||
do: (Enum.map opts, &format_attrs_for_ejabberd/1)
|
||||
|
||||
defp format_mods_for_ejabberd(mods) do
|
||||
Enum.map mods, fn %EjabberdModule{module: mod, attrs: attrs} ->
|
||||
{mod, attrs[:opts]}
|
||||
|
|
|
@ -3,12 +3,12 @@ defmodule Ejabberd.Config.Validation do
|
|||
Module used to validate a list of modules.
|
||||
"""
|
||||
|
||||
@type mod_validation :: {[EjabberdModule.t], EjabberdModule.t, map}
|
||||
@type mod_validation_result :: {:ok, EjabberdModule.t} | {:error, EjabberdModule.t, map}
|
||||
|
||||
alias Ejabberd.Config.EjabberdModule
|
||||
alias Ejabberd.Config.Validator
|
||||
|
||||
@type mod_validation :: {[EjabberdModule.t], EjabberdModule.t, map}
|
||||
@type mod_validation_result :: {:ok, EjabberdModule.t} | {:error, EjabberdModule.t, map}
|
||||
|
||||
@doc """
|
||||
Given a module or a list of modules it runs validators on them
|
||||
and returns {:ok, mod} or {:error, mod, errors}, for each
|
||||
|
|
|
@ -3,11 +3,12 @@ defmodule Ejabberd.Config.Validator.Attrs do
|
|||
Validator module used to validate attributes.
|
||||
"""
|
||||
|
||||
# TODO: Duplicated from validator.ex !!!
|
||||
@type mod_validation :: {[EjabberdModule.t], EjabberdModule.t, map}
|
||||
|
||||
import Ejabberd.Config.ValidatorUtility
|
||||
alias Ejabberd.Config.Attr
|
||||
alias Ejabberd.Config.EjabberdModule
|
||||
|
||||
# TODO: Duplicated from validator.ex !!!
|
||||
@type mod_validation :: {[EjabberdModule.t], EjabberdModule.t, map}
|
||||
|
||||
@doc """
|
||||
Given a module (with the form used for validation)
|
||||
|
@ -17,9 +18,9 @@ defmodule Ejabberd.Config.Validator.Attrs do
|
|||
@spec validate(mod_validation) :: mod_validation
|
||||
def validate({modules, mod, errors}) do
|
||||
errors = Enum.reduce mod.attrs, errors, fn(attr, err) ->
|
||||
case Attr.validate(attr) do
|
||||
{:ok, _attr} -> err
|
||||
{:error, attr, cause} -> put_error(err, :attribute, {attr, cause})
|
||||
case Attr.validate([attr]) do
|
||||
[{:ok, _attr}] -> err
|
||||
[{:error, attr, cause}] -> put_error(err, :attribute, {attr, cause})
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@ defmodule Ejabberd.Config.Validator.Dependencies do
|
|||
with the @dependency annotation.
|
||||
"""
|
||||
|
||||
alias Ejabberd.Config.EjabberdModule
|
||||
|
||||
# TODO: Duplicated from validator.ex !!!
|
||||
@type mod_validation :: {[EjabberdModule.t], EjabberdModule.t, map}
|
||||
import Ejabberd.Config.ValidatorUtility
|
||||
|
|
|
@ -4,8 +4,6 @@ defmodule Ejabberd.Config.ValidatorUtility do
|
|||
Imports utility functions for working with validation structures.
|
||||
"""
|
||||
|
||||
alias Ejabberd.Config.EjabberdModule
|
||||
|
||||
@doc """
|
||||
Inserts an error inside the errors collection, for the given key.
|
||||
If the key doesn't exists then it creates an empty collection
|
||||
|
@ -22,7 +20,6 @@ defmodule Ejabberd.Config.ValidatorUtility do
|
|||
Given a list of modules it extracts and returns a list
|
||||
of the module names (which are Elixir.Module).
|
||||
"""
|
||||
@spec extract_module_names(EjabberdModule.t) :: [atom]
|
||||
def extract_module_names(modules) when is_list(modules) do
|
||||
modules
|
||||
|> Enum.map(&Map.get(&1, :module))
|
||||
|
|
|
@ -7,7 +7,7 @@ defmodule Ejabberd.ConfigUtil do
|
|||
@doc """
|
||||
Returns true when the config file is based on elixir.
|
||||
"""
|
||||
@spec is_elixir_config(list) :: boolean
|
||||
@spec is_elixir_config(binary) :: boolean
|
||||
def is_elixir_config(filename) when is_list(filename) do
|
||||
is_elixir_config(to_string(filename))
|
||||
end
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
defmodule Ejabberd.Module do
|
||||
|
||||
defmacro __using__(opts) do
|
||||
logger_enabled = Keyword.get(opts, :logger, true)
|
||||
|
||||
quote do
|
||||
@behaviour :gen_mod
|
||||
import Ejabberd.Module
|
||||
|
||||
unquote(if logger_enabled do
|
||||
quote do: import Ejabberd.Logger
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
# gen_mod callbacks
|
||||
def depends(_host, _opts), do: []
|
||||
def mod_opt_type(_), do: []
|
||||
end
|
44
lib/ejabberd_auth_example.ex
Normal file
44
lib/ejabberd_auth_example.ex
Normal file
|
@ -0,0 +1,44 @@
|
|||
defmodule Ejabberd.Auth.Example do
|
||||
|
||||
@moduledoc """
|
||||
Example ejabberd auth method written in Elixir.
|
||||
|
||||
This is an example to demonstrate the usage of Elixir to
|
||||
create ejabberd auth methods.
|
||||
|
||||
Example configuration:
|
||||
auth_method: 'Ejabberd.Auth.Example'
|
||||
"""
|
||||
|
||||
@behaviour :ejabberd_auth
|
||||
import Ejabberd.Logger
|
||||
|
||||
@impl true
|
||||
def start(host) do
|
||||
info("Starting Ejabberd.Auth.Example to authenticate '#{host}' users")
|
||||
nil
|
||||
end
|
||||
|
||||
@impl true
|
||||
def stop(host) do
|
||||
info("Stopping Ejabberd.Auth.Example to authenticate '#{host}' users")
|
||||
nil
|
||||
end
|
||||
|
||||
@impl true
|
||||
def check_password("alice", _authz_id, _host, "secret"), do: {:nocache, true}
|
||||
def check_password(_username, _authz_id, _host, _secret), do: {:nocache, false}
|
||||
|
||||
@impl true
|
||||
def user_exists("alice", _host), do: {:nocache, true}
|
||||
def user_exists(_username, _host), do: {:nocache, false}
|
||||
|
||||
@impl true
|
||||
def plain_password_required(_binary), do: true
|
||||
|
||||
@impl true
|
||||
def store_type(_host), do: :external
|
||||
|
||||
@impl true
|
||||
def use_cache(_host), do: false
|
||||
end
|
|
@ -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
|
||||
|
|
46
lib/mod_example.ex
Normal file
46
lib/mod_example.ex
Normal file
|
@ -0,0 +1,46 @@
|
|||
defmodule Ejabberd.Module.Example do
|
||||
|
||||
@moduledoc """
|
||||
Example ejabberd module written in Elixir.
|
||||
|
||||
This is an example to demonstrate the usage of Elixir to
|
||||
create ejabberd modules.
|
||||
|
||||
Example configuration:
|
||||
modules:
|
||||
'Ejabberd.Module.Example': {}
|
||||
"""
|
||||
|
||||
@behaviour :gen_mod
|
||||
import Ejabberd.Logger
|
||||
|
||||
def start(host, _opts) do
|
||||
info("Starting Ejabberd.Module.Example for host '#{host}'")
|
||||
Ejabberd.Hooks.add(:set_presence_hook, host, __MODULE__, :on_presence, 50)
|
||||
:ok
|
||||
end
|
||||
|
||||
def stop(host) do
|
||||
info("Stopping Ejabberd.Module.Example for host '#{host}'")
|
||||
Ejabberd.Hooks.delete(:set_presence_hook, host, __MODULE__, :on_presence, 50)
|
||||
:ok
|
||||
end
|
||||
|
||||
def on_presence(user, _server, _resource, _packet) do
|
||||
info("Receive presence for #{user}")
|
||||
:none
|
||||
end
|
||||
|
||||
def depends(_host, _opts) do
|
||||
[]
|
||||
end
|
||||
|
||||
def mod_options(_host) do
|
||||
[]
|
||||
end
|
||||
|
||||
def mod_doc() do
|
||||
%{:desc => "This is just a demonstration."}
|
||||
end
|
||||
|
||||
end
|
|
@ -1,33 +0,0 @@
|
|||
defmodule ModPresenceDemo do
|
||||
use Ejabberd.Module
|
||||
|
||||
def start(host, _opts) do
|
||||
info('Starting ejabberd module Presence Demo')
|
||||
Ejabberd.Hooks.add(:set_presence_hook, host, __MODULE__, :on_presence, 50)
|
||||
:ok
|
||||
end
|
||||
|
||||
def stop(host) do
|
||||
info('Stopping ejabberd module Presence Demo')
|
||||
Ejabberd.Hooks.delete(:set_presence_hook, host, __MODULE__, :on_presence, 50)
|
||||
:ok
|
||||
end
|
||||
|
||||
def on_presence(user, _server, _resource, _packet) do
|
||||
info('Receive presence for #{user}')
|
||||
:none
|
||||
end
|
||||
|
||||
def depends(_host, _opts) do
|
||||
[]
|
||||
end
|
||||
|
||||
def mod_options(_host) do
|
||||
[]
|
||||
end
|
||||
|
||||
def mod_doc() do
|
||||
%{:desc => 'This is just a demonstration.'}
|
||||
end
|
||||
|
||||
end
|
2193
man/ejabberd.yml.5
2193
man/ejabberd.yml.5
File diff suppressed because it is too large
Load diff
178
mix.exs
178
mix.exs
|
@ -3,31 +3,34 @@ defmodule Ejabberd.MixProject do
|
|||
|
||||
def project do
|
||||
[app: :ejabberd,
|
||||
source_url: "https://github.com/processone/ejabberd",
|
||||
version: version(),
|
||||
description: description(),
|
||||
elixir: elixir_required_version(),
|
||||
elixirc_paths: ["lib"],
|
||||
compile_path: ".",
|
||||
compilers: [:asn1] ++ Mix.compilers,
|
||||
compilers: [:asn1, :yecc] ++ Mix.compilers(),
|
||||
erlc_options: erlc_options(),
|
||||
erlc_paths: ["asn1", "src"],
|
||||
# Elixir tests are starting the part of ejabberd they need
|
||||
aliases: [test: "test --no-start"],
|
||||
start_permanent: Mix.env() == :prod,
|
||||
language: :erlang,
|
||||
dialyzer: dialyzer(),
|
||||
releases: releases(),
|
||||
package: package(),
|
||||
docs: docs(),
|
||||
deps: deps()]
|
||||
end
|
||||
|
||||
def version do
|
||||
case config(:vsn) do
|
||||
:false -> "0.0.0" # ./configure wasn't run: vars.config not created
|
||||
'0.0' -> "0.0.0" # the full git repository wasn't downloaded
|
||||
'latest.0' -> "0.0.0" # running 'docker-ejabberd/ecs/build.sh latest'
|
||||
~c"0.0" -> "0.0.0" # the full git repository wasn't downloaded
|
||||
~c"latest.0" -> "0.0.0" # running 'docker-ejabberd/ecs/build.sh latest'
|
||||
[_, _, ?., _, _] = x ->
|
||||
head = String.replace(:erlang.list_to_binary(x), ~r/\.0+([0-9])/, ".\\1")
|
||||
<<head::binary, ".0">>
|
||||
"#{head}.0"
|
||||
vsn -> String.replace(:erlang.list_to_binary(vsn), ~r/\.0+([0-9])/, ".\\1")
|
||||
end
|
||||
end
|
||||
|
@ -40,14 +43,24 @@ defmodule Ejabberd.MixProject do
|
|||
|
||||
def application do
|
||||
[mod: {:ejabberd_app, []},
|
||||
extra_applications: [:mix],
|
||||
applications: [:idna, :inets, :kernel, :sasl, :ssl, :stdlib,
|
||||
:base64url, :fast_tls, :fast_xml, :fast_yaml, :jiffy, :jose,
|
||||
:p1_utils, :stringprep, :syntax_tools, :yconf],
|
||||
extra_applications: [:inets, :kernel, :sasl, :ssl, :stdlib, :syntax_tools,
|
||||
:logger, :mix]
|
||||
++ cond_apps(),
|
||||
included_applications: [:mnesia, :os_mon,
|
||||
:cache_tab, :eimp, :mqtree, :p1_acme,
|
||||
:p1_oauth2, :pkix, :xmpp]
|
||||
++ cond_apps()]
|
||||
:p1_oauth2, :pkix]
|
||||
++ cond_included_apps()]
|
||||
end
|
||||
|
||||
defp dialyzer do
|
||||
[
|
||||
plt_add_apps: [
|
||||
:mnesia, :odbc, :os_mon, :stdlib,
|
||||
:eredis, :luerl,
|
||||
:cache_tab, :eimp, :epam, :esip, :ezlib, :mqtree,
|
||||
:p1_acme, :p1_mysql, :p1_oauth2, :p1_pgsql, :pkix,
|
||||
:sqlite3, :stun, :xmpp],
|
||||
]
|
||||
end
|
||||
|
||||
defp if_version_above(ver, okResult) do
|
||||
|
@ -68,20 +81,24 @@ defmodule Ejabberd.MixProject do
|
|||
|
||||
defp erlc_options do
|
||||
# Use our own includes + includes from all dependencies
|
||||
includes = ["include"] ++ deps_include(["fast_xml", "xmpp", "p1_utils"])
|
||||
includes = ["include", deps_include()]
|
||||
result = [{:d, :ELIXIR_ENABLED}] ++
|
||||
cond_options() ++
|
||||
Enum.map(includes, fn (path) -> {:i, path} end) ++
|
||||
if_version_above('20', [{:d, :DEPRECATED_GET_STACKTRACE}]) ++
|
||||
if_version_above('20', [{:d, :HAVE_URI_STRING}]) ++
|
||||
if_version_above('20', [{:d, :HAVE_ERL_ERROR}]) ++
|
||||
if_version_below('21', [{:d, :USE_OLD_HTTP_URI}]) ++
|
||||
if_version_below('22', [{:d, :LAGER}]) ++
|
||||
if_version_below('21', [{:d, :NO_CUSTOMIZE_HOSTNAME_CHECK}]) ++
|
||||
if_version_below('23', [{:d, :USE_OLD_CRYPTO_HMAC}]) ++
|
||||
if_version_below('23', [{:d, :USE_OLD_PG2}]) ++
|
||||
if_version_below('24', [{:d, :COMPILER_REPORTS_ONLY_LINES}]) ++
|
||||
if_version_below('24', [{:d, :SYSTOOLS_APP_DEF_WITHOUT_OPTIONAL}])
|
||||
if_version_above(~c"20", [{:d, :HAVE_URI_STRING}]) ++
|
||||
if_version_above(~c"20", [{:d, :HAVE_ERL_ERROR}]) ++
|
||||
if_version_below(~c"21", [{:d, :USE_OLD_HTTP_URI}]) ++
|
||||
if_version_below(~c"22", [{:d, :LAGER}]) ++
|
||||
if_version_below(~c"21", [{:d, :NO_CUSTOMIZE_HOSTNAME_CHECK}]) ++
|
||||
if_version_below(~c"23", [{:d, :USE_OLD_CRYPTO_HMAC}]) ++
|
||||
if_version_below(~c"23", [{:d, :USE_OLD_PG2}]) ++
|
||||
if_version_below(~c"24", [{:d, :COMPILER_REPORTS_ONLY_LINES}]) ++
|
||||
if_version_below(~c"24", [{:d, :SYSTOOLS_APP_DEF_WITHOUT_OPTIONAL}]) ++
|
||||
if_version_below(~c"24", [{:d, :OTP_BELOW_24}]) ++
|
||||
if_version_below(~c"25", [{:d, :OTP_BELOW_25}]) ++
|
||||
if_version_below(~c"26", [{:d, :OTP_BELOW_26}]) ++
|
||||
if_version_below(~c"27", [{:d, :OTP_BELOW_27}]) ++
|
||||
if_version_below(~c"28", [{:d, :OTP_BELOW_28}])
|
||||
defines = for {:d, value} <- result, do: {:d, value}
|
||||
result ++ [{:d, :ALL_DEFS, defines}]
|
||||
end
|
||||
|
@ -98,29 +115,27 @@ defmodule Ejabberd.MixProject do
|
|||
end
|
||||
|
||||
defp deps do
|
||||
[{:base64url, "~> 1.0"},
|
||||
{:cache_tab, "~> 1.0"},
|
||||
[{:cache_tab, "~> 1.0"},
|
||||
{:dialyxir, "~> 1.2", only: [:test], runtime: false},
|
||||
{:eimp, "~> 1.0"},
|
||||
{:ex_doc, ">= 0.0.0", only: :dev},
|
||||
{:fast_tls, "~> 1.1"},
|
||||
{:fast_xml, "~> 1.1"},
|
||||
{:ex_doc, "~> 0.31", only: [:edoc], runtime: false},
|
||||
{:fast_tls, "~> 1.1.24"},
|
||||
{:fast_xml, "~> 1.1.56"},
|
||||
{:fast_yaml, "~> 1.0"},
|
||||
{:idna, "~> 6.0"},
|
||||
{:jiffy, "~> 1.1.1"},
|
||||
{:jose, "~> 1.11.5"},
|
||||
{:mqtree, "~> 1.0"},
|
||||
{:p1_acme, "~> 1.0"},
|
||||
{:p1_acme, ">= 1.0.28"},
|
||||
{:p1_oauth2, "~> 0.6"},
|
||||
{:p1_utils, "~> 1.0"},
|
||||
{:pkix, "~> 1.0"},
|
||||
{:stringprep, ">= 1.0.26"},
|
||||
{:xmpp, ">= 1.6.0"},
|
||||
{:yconf, "~> 1.0"}]
|
||||
{:xmpp, git: "https://github.com/processone/xmpp", ref: "e9d901ea84fd3910ad32b715853397eb1155b41c", override: true},
|
||||
{:yconf, git: "https://github.com/processone/yconf", ref: "95692795a8a8d950ba560e5b07e6b80660557259", override: true}]
|
||||
++ cond_deps()
|
||||
end
|
||||
|
||||
defp deps_include(deps) do
|
||||
base = if Mix.Project.umbrella?() do
|
||||
defp deps_include() do
|
||||
if Mix.Project.umbrella?() do
|
||||
"../../deps"
|
||||
else
|
||||
case Mix.Project.deps_paths()[:ejabberd] do
|
||||
|
@ -128,28 +143,45 @@ defmodule Ejabberd.MixProject do
|
|||
_ -> ".."
|
||||
end
|
||||
end
|
||||
Enum.map(deps, fn dep -> base<>"/#{dep}/include" end)
|
||||
end
|
||||
|
||||
defp cond_deps do
|
||||
for {:true, dep} <- [{config(:pam), {:epam, "~> 1.0"}},
|
||||
{config(:redis), {:eredis, "~> 1.2.0"}},
|
||||
{Mix.env() == :translations,
|
||||
{:ejabberd_po, git: "https://github.com/processone/ejabberd-po.git"}},
|
||||
{Mix.env() == :dev,
|
||||
{:exsync, "~> 0.2", optional: true, runtime: false}},
|
||||
{config(:redis), {:eredis, "~> 1.7.1"}},
|
||||
{config(:sip), {:esip, "~> 1.0"}},
|
||||
{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.20"}},
|
||||
{config(:pgsql), {:p1_pgsql, "~> 1.1"}},
|
||||
{if_version_above(~c"23", true), {:jose, "~> 1.11.10"}},
|
||||
{if_version_below(~c"24", true), {:jose, "1.11.1", override: true}},
|
||||
{if_version_below(~c"27", true), {:jiffy, "~> 1.1.1"}},
|
||||
{if_version_below(~c"22", true), {:lager, "~> 3.9.1"}},
|
||||
{config(:lua), {:luerl, "~> 1.2.0"}},
|
||||
{config(:mysql), {:p1_mysql, ">= 1.0.24"}},
|
||||
{config(:pgsql), {:p1_pgsql, ">= 1.1.32"}},
|
||||
{config(:sqlite), {:sqlite3, "~> 1.1"}},
|
||||
{config(:stun), {:stun, "~> 1.0"}}], do:
|
||||
dep
|
||||
end
|
||||
|
||||
defp cond_apps do
|
||||
for {:true, app} <- [{config(:stun), :stun},
|
||||
{if_version_below(~c"27", true), :jiffy},
|
||||
{config(:tools), :debugger},
|
||||
{config(:tools), :observer},
|
||||
{config(:tools), :wx}], do:
|
||||
app
|
||||
end
|
||||
|
||||
defp cond_included_apps do
|
||||
for {:true, app} <- [{config(:pam), :epam},
|
||||
{config(:lua), :luerl},
|
||||
{config(:redis), :eredis},
|
||||
{if_version_below('22', true), :lager},
|
||||
{Mix.env() == :edoc, :ex_doc},
|
||||
{Mix.env() == :test, :dialyxir},
|
||||
{if_version_below(~c"22", true), :lager},
|
||||
{config(:mysql), :p1_mysql},
|
||||
{config(:sip), :esip},
|
||||
{config(:odbc), :odbc},
|
||||
|
@ -162,19 +194,30 @@ defmodule Ejabberd.MixProject do
|
|||
[# These are the default files included in the package
|
||||
files: ["include", "lib", "priv", "sql", "src",
|
||||
"COPYING", "README.md",
|
||||
"ejabberd.yml.example", "config/runtime.exs",
|
||||
"mix.exs", "rebar.config", "rebar.config.script", "vars.config"],
|
||||
maintainers: ["ProcessOne"],
|
||||
licenses: ["GPL-2.0-or-later"],
|
||||
links: %{"Site" => "https://www.ejabberd.im",
|
||||
"Documentation" => "http://docs.ejabberd.im",
|
||||
"Source" => "https://github.com/processone/ejabberd",
|
||||
"ProcessOne" => "http://www.process-one.net/"}]
|
||||
links: %{"ejabberd.im" => "https://www.ejabberd.im",
|
||||
"ejabberd Docs" => "https://docs.ejabberd.im",
|
||||
"GitHub" => "https://github.com/processone/ejabberd",
|
||||
"ProcessOne" => "https://www.process-one.net/"}]
|
||||
end
|
||||
|
||||
defp vars do
|
||||
case :file.consult("vars.config") do
|
||||
filepath = case Application.fetch_env(:ejabberd, :vars_config_path) do
|
||||
:error ->
|
||||
"vars.config"
|
||||
{:ok, path} ->
|
||||
path
|
||||
end
|
||||
config2 = case :file.consult(filepath) do
|
||||
{:ok,config} -> config
|
||||
_ -> [zlib: true]
|
||||
_ -> [stun: true, zlib: true]
|
||||
end
|
||||
case Mix.env() do
|
||||
:dev -> List.keystore(config2, :tools, 0, {:tools, true})
|
||||
_ -> config2
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -203,7 +246,7 @@ defmodule Ejabberd.MixProject do
|
|||
_ -> :ok
|
||||
end
|
||||
case Version.match?(System.version(), "< 1.11.4")
|
||||
and :erlang.system_info(:otp_release) > '23' do
|
||||
and :erlang.system_info(:otp_release) > ~c"23" do
|
||||
true ->
|
||||
IO.puts("ERROR: To build releases with Elixir lower than 1.11.4, Erlang/OTP lower than 24 is required.")
|
||||
_ -> :ok
|
||||
|
@ -223,6 +266,7 @@ defmodule Ejabberd.MixProject do
|
|||
ejabberd: [
|
||||
include_executables_for: [:unix],
|
||||
# applications: [runtime_tools: :permanent]
|
||||
strip_beams: Mix.env() != :dev,
|
||||
steps: [©_extra_files/1, :assemble | maybe_tar]
|
||||
]
|
||||
]
|
||||
|
@ -239,6 +283,8 @@ defmodule Ejabberd.MixProject do
|
|||
config_dir: config(:config_dir),
|
||||
logs_dir: config(:logs_dir),
|
||||
spool_dir: config(:spool_dir),
|
||||
vsn: version(),
|
||||
iexpath: config(:iexpath),
|
||||
erl: config(:erl),
|
||||
epmd: config(:epmd),
|
||||
bindir: Path.join([config(:release_dir), "releases", version()]),
|
||||
|
@ -253,14 +299,14 @@ defmodule Ejabberd.MixProject do
|
|||
execute = fn(command) ->
|
||||
case function_exported?(System, :shell, 1) do
|
||||
true ->
|
||||
System.shell(command)
|
||||
System.shell(command, into: IO.stream())
|
||||
false ->
|
||||
:os.cmd(to_charlist(command))
|
||||
end
|
||||
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 ->
|
||||
|
@ -271,8 +317,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)
|
||||
|
@ -320,13 +365,38 @@ defmodule Ejabberd.MixProject do
|
|||
end
|
||||
|
||||
case Mix.env() do
|
||||
:dev -> execute.("REL_DIR_TEMP=$PWD/rel/overlays/ rel/setup-dev.sh")
|
||||
:dev -> execute.("REL_DIR_TEMP=$PWD/rel/overlays/ rel/setup-dev.sh mix")
|
||||
_ -> :ok
|
||||
end
|
||||
|
||||
release
|
||||
end
|
||||
|
||||
defp docs do
|
||||
[
|
||||
main: "readme",
|
||||
logo: "_build/edoc/logo.png",
|
||||
source_ref: "master",
|
||||
extra_section: "", # No need for Pages section name, it's the only one
|
||||
api_reference: false, # API section has just Elixir, hide it
|
||||
filter_modules: "aaaaa", # Module section has just Elixir modules, hide them
|
||||
extras: [
|
||||
"README.md": [title: "Readme"],
|
||||
"COMPILE.md": [title: "Compile and Install"],
|
||||
"CONTAINER.md": [title: "Container Image"],
|
||||
"CONTRIBUTING.md": [title: "Contributing"],
|
||||
"CONTRIBUTORS.md": [title: "Contributors"],
|
||||
"CODE_OF_CONDUCT.md": [title: "Code of Conduct"],
|
||||
"CHANGELOG.md": [title: "ChangeLog"],
|
||||
"COPYING": [title: "Copying License"],
|
||||
"_build/edoc/docs.md": [title: "⟹ ejabberd Docs"]
|
||||
],
|
||||
groups_for_extras: [
|
||||
"": Path.wildcard("*.md") ++ ["COPYING"],
|
||||
"For more documentation": "_build/edoc/docs.md"
|
||||
]
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
defmodule Mix.Tasks.Compile.Asn1 do
|
||||
|
@ -339,7 +409,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)
|
||||
|
@ -361,7 +431,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
|
||||
|
|
68
mix.lock
68
mix.lock
|
@ -1,35 +1,39 @@
|
|||
%{
|
||||
"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.29", "149d50dcb3a93d9f3d6f3ecf18c918fb5a2d3c001b5d3305c926cddfbd33355b", [:mix], [], "hexpm", "4902af1b3eb139016aed210888748db8070b8125c2342ce3dcae4f38dcc63503"},
|
||||
"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.49", "7949c288d1e094cb44bff5499231939e34c2ace06de8bef950a341edb1743357", [: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.7", [hex: :stun, repo: "hexpm", optional: false]}], "hexpm", "a1379ced50c3a2a8f82a77b3184e94c3b87782e90e5ddc0d2baf5b654ecfaa11"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.29.1", "b1c652fa5f92ee9cf15c75271168027f92039b3877094290a75abcaac82a9f77", [:mix], [{:earmark_parser, "~> 1.4.19", [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", "b7745fa6374a36daf484e2a2012274950e084815b936b1319aeebcf7809574f6"},
|
||||
"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.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.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.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.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"},
|
||||
"makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"},
|
||||
"mqtree": {:hex, :mqtree, "1.0.15", "bc54d8b88698fdaebc1e27a9ac43688b927e3dbc05bd5cee4057e69a89a8cf17", [:rebar3], [{:p1_utils, "1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "294ac43c9b3d372e24eeea56c259e19c655522dcff64a55c401a639663b9d829"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"},
|
||||
"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.21", "5972add935e7b1b03d981fa88a0d01e96de357443eaf96ca2fb62e465a717f47", [:rebar3], [], "hexpm", "16f197adb99dab034139c429b256d65948a4057d3e4d553adbe5ce3236c4aabf"},
|
||||
"p1_oauth2": {:hex, :p1_oauth2, "0.6.11", "96b4e85c08355720523c2f892011a81a07994d15c179ce4dd82d704fecad15b2", [:rebar3], [], "hexpm", "9c3c6ae59382b9525473bb02a32949889808f33f95f6db10594fd92acd1f63db"},
|
||||
"p1_pgsql": {:hex, :p1_pgsql, "1.1.20", "0231de1a427a561afbea89212a61d2409f1a42696eeca16d0085305aee07717a", [:rebar3], [{:xmpp, "1.6.1", [hex: :xmpp, repo: "hexpm", optional: false]}], "hexpm", "240b40fb3fd7e330fdf1d0beff2db0cb090ae5a6eef08a0a157ebb7251ff361c"},
|
||||
"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.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.7", "d6bdcf0aa72c927fbe8b779fc4ef1f3916c5450b2ff136c800a7a0361fb1ddff", [: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", "3fb1f07aaa630b2276e83d267557d1ceb3d2ce52d1145de71864160210655852"},
|
||||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"},
|
||||
"xmpp": {:hex, :xmpp, "1.6.1", "4075de3c1bb63c7838dc6c8d06167ffba2e39fd285e2a295287f26c1d8f64707", [:rebar3], [{:ezlib, "1.0.12", [hex: :ezlib, repo: "hexpm", optional: false]}, {:fast_tls, "1.1.16", [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.29", [hex: :stringprep, repo: "hexpm", optional: false]}], "hexpm", "87fee84f805a151f4d85c1c11c16a738716dfaae353cb88898c0254f05df81c0"},
|
||||
"yconf": {:hex, :yconf, "1.0.15", "e22998b3d7728270bdd06162a9515bd142b14fae8927cbdbd3ef639c32aa6f7a", [:rebar3], [{:fast_yaml, "1.0.36", [hex: :fast_yaml, repo: "hexpm", optional: false]}], "hexpm", "7ff2ab24d3c9833842716b9aaaa01a8f96641a7695cbb701b03445c4def01117"},
|
||||
"cache_tab": {:hex, :cache_tab, "1.0.33", "e2542afb34f17ee3ca19d2b0f546a074922c2b99fb6b2acfb38160d7d0336ec3", [:rebar3], [{:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "4258009eb050b22aabe0c848e230bba58401a6895c58c2ff74dfb635e3c35900"},
|
||||
"dialyxir": {:hex, :dialyxir, "1.4.6", "7cca478334bf8307e968664343cbdb432ee95b4b68a9cba95bdabb0ad5bdfd9a", [:mix], [{:erlex, ">= 0.2.7", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "8cf5615c5cd4c2da6c501faae642839c8405b49f8aa057ad4ae401cb808ef64d"},
|
||||
"earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"},
|
||||
"eimp": {:hex, :eimp, "1.0.26", "c0b05f32e35629c4d9bcfb832ff879a92b0f92b19844bc7835e0a45635f2899a", [:rebar3], [{:p1_utils, "~> 1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "d96d4e8572b9dfc40f271e47f0cb1d8849373bc98a21223268781765ed52044c"},
|
||||
"epam": {:hex, :epam, "1.0.14", "aa0b85d27f4ef3a756ae995179df952a0721237e83c6b79d644347b75016681a", [:rebar3], [], "hexpm", "2f3449e72885a72a6c2a843f561add0fc2f70d7a21f61456930a547473d4d989"},
|
||||
"eredis": {:hex, :eredis, "1.7.1", "39e31aa02adcd651c657f39aafd4d31a9b2f63c6c700dc9cece98d4bc3c897ab", [:mix, :rebar3], [], "hexpm", "7c2b54c566fed55feef3341ca79b0100a6348fd3f162184b7ed5118d258c3cc1"},
|
||||
"erlex": {:hex, :erlex, "0.2.7", "810e8725f96ab74d17aac676e748627a07bc87eb950d2b83acd29dc047a30595", [:mix], [], "hexpm", "3ed95f79d1a844c3f6bf0cea61e0d5612a42ce56da9c03f01df538685365efb0"},
|
||||
"esip": {:hex, :esip, "1.0.59", "eb202f8c62928193588091dfedbc545fe3274c34ecd209961f86dcb6c9ebce88", [:rebar3], [{:fast_tls, "1.1.25", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stun, "1.2.21", [hex: :stun, repo: "hexpm", optional: false]}], "hexpm", "0bdf2e3c349dc0b144f173150329e675c6a51ac473d7a0b2e362245faad3fbe6"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.38.3", "ddafe36b8e9fe101c093620879f6604f6254861a95133022101c08e75e6c759a", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "ecaa785456a67f63b4e7d7f200e8832fa108279e7eb73fd9928e7e66215a01f9"},
|
||||
"exsync": {:hex, :exsync, "0.4.1", "0a14fe4bfcb80a509d8a0856be3dd070fffe619b9ba90fec13c58b316c176594", [:mix], [{:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "cefb22aa805ec97ffc5b75a4e1dc54bcaf781e8b32564bf74abbe5803d1b5178"},
|
||||
"ezlib": {:hex, :ezlib, "1.0.15", "d74f5df191784744726a5b1ae9062522c606334f11086363385eb3b772d91357", [:rebar3], [{:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "dd14ba6c12521af5cfe6923e73e3d545f4a0897dc66bfab5287fbb7ae3962eab"},
|
||||
"fast_tls": {:hex, :fast_tls, "1.1.25", "da8ed6f05a2452121b087158b17234749f36704c1f2b74dc51db99a1e27ed5e8", [:rebar3], [{:p1_utils, "~> 1.0.26", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "59e183b5740e670e02b8aa6be673b5e7779e5fe5bfcc679fe2d4993d1949a821"},
|
||||
"fast_xml": {:hex, :fast_xml, "1.1.57", "31efc0f9bceda92069704f7a25830407da5dc3dad1272b810d6f2e13e73cc11a", [:rebar3], [{:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "eec34e90adacafe467d5ddab635a014ded73b98b4061554b2d1972173d929c39"},
|
||||
"fast_yaml": {:hex, :fast_yaml, "1.0.39", "2e71168091949bab0e5f583b340a99072b4d22d93eb86624e7850a12b1517be4", [:rebar3], [{:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "24c7b9ab9e2b9269d64e45f4a2a1280966adb17d31e63365cfd3ee277fb0a78d"},
|
||||
"file_system": {:hex, :file_system, "1.1.0", "08d232062284546c6c34426997dd7ef6ec9f8bbd090eb91780283c9016840e8f", [:mix], [], "hexpm", "bfcf81244f416871f2a2e15c1b515287faa5db9c6bcf290222206d120b3d43f6"},
|
||||
"idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
|
||||
"jiffy": {:hex, :jiffy, "1.1.2", "a9b6c9a7ec268e7cf493d028f0a4c9144f59ccb878b1afe42841597800840a1b", [:rebar3], [], "hexpm", "bb61bc42a720bbd33cb09a410e48bb79a61012c74cb8b3e75f26d988485cf381"},
|
||||
"jose": {:hex, :jose, "1.11.10", "a903f5227417bd2a08c8a00a0cbcc458118be84480955e8d251297a425723f83", [:mix, :rebar3], [], "hexpm", "0d6cd36ff8ba174db29148fc112b5842186b68a90ce9fc2b3ec3afe76593e614"},
|
||||
"luerl": {:hex, :luerl, "1.2.3", "df25f41944e57a7c4d9ef09d238bc3e850276c46039cfc12b8bb42eccf36fcb1", [:rebar3], [], "hexpm", "1b4b9d0ca5d7d280d1d2787a6a5ee9f5a212641b62bff91556baa53805df3aed"},
|
||||
"makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"},
|
||||
"makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [: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", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"},
|
||||
"makeup_erlang": {:hex, :makeup_erlang, "1.0.2", "03e1804074b3aa64d5fad7aa64601ed0fb395337b982d9bcf04029d68d51b6a7", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "af33ff7ef368d5893e4a267933e7744e46ce3cf1f61e2dccf53a111ed3aa3727"},
|
||||
"mqtree": {:hex, :mqtree, "1.0.19", "d769c25f898810725fc7db0dbffe5f72098647048b1be2e6d772f1c2f31d8476", [:rebar3], [{:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "c81065715c49a1882812f80a5ae2d842e80dd3f2d130530df35990248bf8ce3c"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"},
|
||||
"p1_acme": {:hex, :p1_acme, "1.0.28", "64d9c17f5412aa92d75b29206b2b984d734a4fe1b7eacb66c3d7a7c697ac612c", [:rebar3], [{:base64url, "~> 1.0", [hex: :base64url, repo: "hexpm", optional: false]}, {:idna, "~> 6.0", [hex: :idna, repo: "hexpm", optional: false]}, {:jiffy, "~> 1.1.1", [hex: :jiffy, repo: "hexpm", optional: false]}, {:jose, "~> 1.11.10", [hex: :jose, repo: "hexpm", optional: false]}, {:yconf, "~> 1.0.17", [hex: :yconf, repo: "hexpm", optional: false]}], "hexpm", "ce686986de3f9d5fd285afe87523cb45329a349c6c6be7acc1ed916725d46423"},
|
||||
"p1_mysql": {:hex, :p1_mysql, "1.0.26", "574d07c9936c53b1ec3556db3cf064cc14a6c39039835b3d940471bfa5ac8e2b", [:rebar3], [], "hexpm", "ea138083f2c54719b9cf549dbf5802a288b0019ea3e5449b354c74cc03fafdec"},
|
||||
"p1_oauth2": {:hex, :p1_oauth2, "0.6.14", "1c5f82535574de87e2059695ac4b91f8f9aebacbc1c80287dae6f02552d47aea", [:rebar3], [], "hexpm", "1fd3ac474e43722d9d5a87c6df8d36f698ed87af7bb81cbbb66361451d99ae8f"},
|
||||
"p1_pgsql": {:hex, :p1_pgsql, "1.1.35", "e13d89f14d717553e85c88a152ce77461916b013d88fcb851e354a0b332d4218", [:rebar3], [{:xmpp, "~> 1.11.0", [hex: :xmpp, repo: "hexpm", optional: false]}], "hexpm", "e99594446c411c660696795b062336f5c4bd800451d8f620bb4d4ce304e255c2"},
|
||||
"p1_utils": {:hex, :p1_utils, "1.0.28", "9a7088a98d788b4c4880fd3c82d0c135650db13f2e4ef7e10db179791bc94d59", [:rebar3], [], "hexpm", "c49bd44bc4a40ad996691af826dd7e0aa56d4d0cd730817190a1f84d1a7f0033"},
|
||||
"pkix": {:hex, :pkix, "1.0.10", "d3bfadf7b7cfe2a3636f1b256c9cce5f646a07ce31e57ee527668502850765a0", [:rebar3], [], "hexpm", "e02164f83094cb124c41b1ab28988a615d54b9adc38575f00f19a597a3ac5d0e"},
|
||||
"sqlite3": {:hex, :sqlite3, "1.1.15", "e819defd280145c328457d7af897d2e45e8e5270e18812ee30b607c99cdd21af", [:rebar3], [], "hexpm", "3c0ba4e13322c2ad49de4e2ddd28311366adde54beae8dba9d9e3888f69d2857"},
|
||||
"stringprep": {:hex, :stringprep, "1.0.33", "22f42866b4f6f3c238ea2b9cb6241791184ddedbab55e94a025511f46325f3ca", [:rebar3], [{:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "96f8b30bc50887f605b33b46bca1d248c19a879319b8c482790e3b4da5da98c0"},
|
||||
"stun": {:hex, :stun, "1.2.21", "735855314ad22cb7816b88597d2f5ca22e24aa5e4d6010a0ef3affb33ceed6a5", [:rebar3], [{:fast_tls, "1.1.25", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "3d7fe8efb9d05b240a6aa9a6bf8b8b7bff2d802895d170443c588987dc1e12d9"},
|
||||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.1", "a48703a25c170eedadca83b11e88985af08d35f37c6f664d6dcfb106a97782fc", [:rebar3], [], "hexpm", "b3a917854ce3ae233619744ad1e0102e05673136776fb2fa76234f3e03b23642"},
|
||||
"xmpp": {:git, "https://github.com/processone/xmpp", "e9d901ea84fd3910ad32b715853397eb1155b41c", [ref: "e9d901ea84fd3910ad32b715853397eb1155b41c"]},
|
||||
"yconf": {:git, "https://github.com/processone/yconf", "95692795a8a8d950ba560e5b07e6b80660557259", [ref: "95692795a8a8d950ba560e5b07e6b80660557259"]},
|
||||
}
|
||||
|
|
|
@ -131,16 +131,27 @@ ul li #navhead a, ul li #navheadsub a, ul li #navheadsubsub a {
|
|||
background: #424a55;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#navitemlogin-start {
|
||||
border-top: 0.2em solid #cae7e4;
|
||||
}
|
||||
#navitemlogin {
|
||||
padding: 0.5em;
|
||||
border-bottom: 0.2em solid #cae7e4;
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
#welcome {
|
||||
padding: 2em;
|
||||
border-top: 0.2em solid #cae7e4;
|
||||
border-bottom: 0.2em solid #cae7e4;
|
||||
background-color: #f4f9f9;
|
||||
}
|
||||
#lastactivity li {
|
||||
padding: 2px;
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
thead tr td {
|
||||
background: #3eaffa;
|
||||
color: #fff;
|
||||
}
|
||||
thead tr td a {
|
||||
color: #fff;
|
||||
background: #cae7e4;
|
||||
}
|
||||
td.copy {
|
||||
text-align: center;
|
||||
|
@ -227,24 +238,32 @@ h3 {
|
|||
padding-top: 25px;
|
||||
width: 70%;
|
||||
}
|
||||
div.anchorlink {
|
||||
display: inline-block;
|
||||
float: right;
|
||||
margin-top: 1em;
|
||||
margin-right: 1em;
|
||||
}
|
||||
div.anchorlink a {
|
||||
padding: 3px;
|
||||
background: #cae7e4;
|
||||
font-size: 0.75em;
|
||||
color: black;
|
||||
}
|
||||
div.guidelink,
|
||||
p[dir=ltr] {
|
||||
display: inline-block;
|
||||
float: right;
|
||||
|
||||
margin: 0;
|
||||
margin-top: 1em;
|
||||
margin-right: 1em;
|
||||
}
|
||||
div.guidelink a,
|
||||
p[dir=ltr] a {
|
||||
display: inline-block;
|
||||
border-radius: 3px;
|
||||
padding: 3px;
|
||||
|
||||
background: #3eaffa;
|
||||
|
||||
font-size: 0.75em;
|
||||
color: #fff;
|
||||
border-radius: 2px;
|
||||
}
|
||||
table {
|
||||
margin-top: 1em;
|
||||
|
@ -265,7 +284,7 @@ input,
|
|||
select {
|
||||
font-size: 1em;
|
||||
}
|
||||
p.result {
|
||||
.result {
|
||||
border: 1px;
|
||||
border-style: dashed;
|
||||
border-color: #FE8A02;
|
||||
|
@ -284,3 +303,20 @@ p.result {
|
|||
color: #cb2431;
|
||||
transition: none;
|
||||
}
|
||||
h3.api {
|
||||
border-bottom: 1px solid #b6b6b6;
|
||||
}
|
||||
details > summary {
|
||||
background-color: #dbeceb;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
list-style: none;
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
details > pre, details > p {
|
||||
background-color: #f2f8f7;
|
||||
border-bottom: 0.2em solid #dbeceb;
|
||||
margin: 0;
|
||||
padding: 10px;
|
||||
}
|
||||
|
|
|
@ -16,12 +16,14 @@ a.roomjid {color: #336699; font-size: 24px; font-weight: bold; font-family: sans
|
|||
div.logdate {color: #663399; font-size: 20px; font-weight: bold; font-family: sans-serif; letter-spacing: 2px; border-bottom: #224466 solid 1pt; margin-left:80pt; margin-top:20px;}
|
||||
div.roomsubject {color: #336699; font-size: 18px; font-family: sans-serif; margin-left: 80pt; margin-bottom: 10px;}
|
||||
div.rc {color: #336699; font-size: 12px; font-family: sans-serif; margin-left: 50%; text-align: right; background: #f3f6f9; border-bottom: 1px solid #336699; border-right: 4px solid #336699;}
|
||||
div.rct {font-weight: bold; background: #e3e6e9; padding-right: 10px;}
|
||||
div.rct {font-weight: bold; background: #e3e6e9; padding-right: 10px; cursor: pointer;}
|
||||
div.rct:hover {text-decoration: underline;}
|
||||
div.rcos {padding-right: 10px;}
|
||||
div.rcoe {color: green;}
|
||||
div.rcod {color: red;}
|
||||
div.rcoe:after {content: ": v";}
|
||||
div.rcod:after {content: ": x";}
|
||||
div.rcot:after {}
|
||||
div.jl {display: none;}
|
||||
.legend {width: 100%; margin-top: 30px; border-top: #224466 solid 1pt; padding: 10px 0px 10px 0px; text-align: left; font-family: monospace; letter-spacing: 2px;}
|
||||
.w3c {position: absolute; right: 10px; width: 60%; text-align: right; font-family: monospace; letter-spacing: 1px;}
|
||||
|
|
1
priv/css/sortable.min.css
vendored
Normal file
1
priv/css/sortable.min.css
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.sortable thead th:not(.no-sort){cursor:pointer}.sortable thead th:not(.no-sort)::after,.sortable thead th:not(.no-sort)::before{transition:color .1s ease-in-out;font-size:1.2em;color:rgba(0,0,0,0)}.sortable thead th:not(.no-sort)::after{margin-left:3px;content:"▸"}.sortable thead th:not(.no-sort):hover::after{color:inherit}.sortable thead th:not(.no-sort)[aria-sort=descending]::after{color:inherit;content:"▾"}.sortable thead th:not(.no-sort)[aria-sort=ascending]::after{color:inherit;content:"▴"}.sortable thead th:not(.no-sort).indicator-left::after{content:""}.sortable thead th:not(.no-sort).indicator-left::before{margin-right:3px;content:"▸"}.sortable thead th:not(.no-sort).indicator-left:hover::before{color:inherit}.sortable thead th:not(.no-sort).indicator-left[aria-sort=descending]::before{color:inherit;content:"▾"}.sortable thead th:not(.no-sort).indicator-left[aria-sort=ascending]::before{color:inherit;content:"▴"}/*# sourceMappingURL=sortable-base.min.css.map */
|
Binary file not shown.
Before Width: | Height: | Size: 177 B |
Binary file not shown.
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 9.7 KiB |
|
@ -6,3 +6,14 @@ function sh(e) {
|
|||
document.getElementById(e).style.display='none';
|
||||
}
|
||||
}
|
||||
// Show/Hide join/leave elements
|
||||
function jlf() {
|
||||
var es = document.getElementsByClassName('jl');
|
||||
for (var i = 0; i < es.length; i++) {
|
||||
if (es[i].style.display === 'block') {
|
||||
es[i].style.display = 'none';
|
||||
} else {
|
||||
es[i].style.display = 'block';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
3
priv/js/sortable.min.js
vendored
Normal file
3
priv/js/sortable.min.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
document.addEventListener("click",function(c){try{function h(b,a){return b.nodeName===a?b:h(b.parentNode,a)}var v=c.shiftKey||c.altKey,d=h(c.target,"TH"),m=d.parentNode,n=m.parentNode,g=n.parentNode;function p(b){var a;return v?b.dataset.sortAlt:null!==(a=b.dataset.sort)&&void 0!==a?a:b.textContent}if("THEAD"===n.nodeName&&g.classList.contains("sortable")&&!d.classList.contains("no-sort")){var q,f=m.cells,r=+d.dataset.sortTbr;for(c=0;c<f.length;c++)f[c]===d?q=+d.dataset.sortCol||c:f[c].setAttribute("aria-sort",
|
||||
"none");f="descending";if("descending"===d.getAttribute("aria-sort")||g.classList.contains("asc")&&"ascending"!==d.getAttribute("aria-sort"))f="ascending";d.setAttribute("aria-sort",f);var w="ascending"===f,x=g.classList.contains("n-last"),t=function(b,a,e){a=p(a.cells[e]);b=p(b.cells[e]);if(x){if(""===a&&""!==b)return-1;if(""===b&&""!==a)return 1}e=+a-+b;a=isNaN(e)?a.localeCompare(b):e;return w?-a:a};for(c=0;c<g.tBodies.length;c++){var k=g.tBodies[c],u=[].slice.call(k.rows,0);u.sort(function(b,a){var e=
|
||||
t(b,a,q);return 0!==e||isNaN(r)?e:t(b,a,r)});var l=k.cloneNode();l.append.apply(l,u);g.replaceChild(l,k)}}}catch(h){}});
|
|
@ -8,4 +8,3 @@
|
|||
{"# participants","# المشاركين"}.
|
||||
{"A description of the node","وصف العقدة"}.
|
||||
{"A Web Page","موقع الكتروني"}.
|
||||
{"'Displayed groups' not added (they do not exist!): ","لم تتم إضافة \"المجموعات المعروضة\" (فهي غير موجودة!): "}.
|
||||
|
|
625
priv/msgs/bg.msg
Normal file
625
priv/msgs/bg.msg
Normal file
|
@ -0,0 +1,625 @@
|
|||
%% 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 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","Конфигурация"}.
|
||||
{"Contact Addresses (normally, room owner or owners)","Адреси за контакт (обикновено собственик или собственици на стая)"}.
|
||||
{"Country","Държава"}.
|
||||
{"Current Discussion Topic","Текуща тема на дискусита"}.
|
||||
{"Database failure","Грешка в базата данни"}.
|
||||
{"Database Tables Configuration at ","Конфигурация на таблиците в базата данни при "}.
|
||||
{"Database","База данни"}.
|
||||
{"December","Декември"}.
|
||||
{"Default users as participants","Потребители по подразбиране като участници"}.
|
||||
{"Delete message of the day on all hosts","Изтрий съобщението на деня от всички нодове"}.
|
||||
{"Delete message of the day","Изтрий съобщението на деня"}.
|
||||
{"Delete User","Изтрий потребителя"}.
|
||||
{"Deliver event notifications","Достави известията за събития"}.
|
||||
{"Deliver payloads with event notifications","Достави прикачените обекти с известията за събития"}.
|
||||
{"Disc only copy","Копие само на диска"}.
|
||||
{"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.","Одобрете или отхвърлете заявката за гласова връзка."}.
|
||||
{"ejabberd HTTP Upload service","ejabberd HTTP Upload услуга"}.
|
||||
{"ejabberd MUC module","ejabberd MUC модул"}.
|
||||
{"ejabberd Multicast service","ejabberd Multicast услуга"}.
|
||||
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe модул"}.
|
||||
{"ejabberd SOCKS5 Bytestreams module","ejabberd SOCKS5 Bytestreams модул"}.
|
||||
{"ejabberd vCard module","ejabberd vCard модул"}.
|
||||
{"ejabberd Web Admin","Уеб администрация на ejabberd"}.
|
||||
{"ejabberd","ejabberd"}.
|
||||
{"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 сървър"}.
|
||||
{"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"}.
|
||||
{"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 Statistics","Покажи статистика за потребителя"}.
|
||||
{"Given Name","Наименование"}.
|
||||
{"Grant voice to this person?","Предоставяне на глас за потребителя?"}.
|
||||
{"has been banned","е със забранен достъп"}.
|
||||
{"has been kicked because of a system shutdown","е отстранен поради изключване на системата"}.
|
||||
{"has been kicked because of an affiliation change","е отстранен поради промяна на принадлежността"}.
|
||||
{"has been kicked because the room has been changed to members-only","е изгонен, защото стаята е променена и е само за членове"}.
|
||||
{"has been kicked","е отстранен"}.
|
||||
{"Hash of the vCard-temp avatar of this room","Хеш на временния vCard аватар на тази стая"}.
|
||||
{"Hat title","Заглавие на шапката"}.
|
||||
{"Hat URI","URI адрес за шапка"}.
|
||||
{"Hats limit exceeded","Превишен е лимитът за шапка"}.
|
||||
{"Host unknown","Неизвестен хост"}.
|
||||
{"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","Неправилен тип съобщение"}.
|
||||
{"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 адреси"}.
|
||||
{"is now known as","е известен като"}.
|
||||
{"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 канали:"}.
|
||||
{"joins the room","се присъединява към стаята"}.
|
||||
{"July","Юли"}.
|
||||
{"June","Юни"}.
|
||||
{"Just created","Току що създаден"}.
|
||||
{"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 хеш на текст трябва да са равни на шестнайсетичния етикет"}.
|
||||
{"leaves the room","напуска стаята"}.
|
||||
{"List of users with hats","Списък на потребителите с шапки"}.
|
||||
{"List users with hats","Избройте потребителите с шапки"}.
|
||||
{"Logged Out","Излязъл"}.
|
||||
{"Logging","Регистриране на събития"}.
|
||||
{"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","Май"}.
|
||||
{"Membership is required to enter this room","Изисква се членство, за вход в тази стая"}.
|
||||
{"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 няма автоматичен начин за възстановяване на паролата в случай, че я забравите."}.
|
||||
{"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","Модератор"}.
|
||||
{"Module failed to handle the query","Модулът не успя да обработи заявката"}.
|
||||
{"Monday","Понеделник"}.
|
||||
{"Multicast","Мултикаст"}.
|
||||
{"Multiple <item/> elements are not allowed by RFC6121","Повече от един <item/> елемента не се разрешават от RFC6121"}.
|
||||
{"Multi-User Chat","Групов чат (MUC)"}.
|
||||
{"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","Октомври"}.
|
||||
{"OK","ДОБРЕ"}.
|
||||
{"Old Password:","Стара парола:"}.
|
||||
{"Online Users","Онлайн потребители"}.
|
||||
{"Online","Онлайн"}.
|
||||
{"Only collection node owners may associate leaf nodes with the collection","Само собственици на колекционни нодове имат право да свързват листови нодове към колекцията"}.
|
||||
{"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 associate leaf nodes with the collection","Само тези от списъка с позволени могат да свързват листови нодове с колекцията"}.
|
||||
{"Only those on a whitelist may subscribe and retrieve items","Само тези от списъка с позволени могат да се абонират и да извличат елементи"}.
|
||||
{"Organization Name","Име на организацията"}.
|
||||
{"Organization Unit","Отдел"}.
|
||||
{"Other Modules Available:","Други налични модули:"}.
|
||||
{"Outgoing s2s Connections","Изходящи s2s връзки"}.
|
||||
{"Owner privileges required","Изискват се привилегии на собственик"}.
|
||||
{"Packet relay is denied by service policy","Предаването на пакети е отказано от политиката на услугата"}.
|
||||
{"Participant ID","ID на участник"}.
|
||||
{"Participant","Участник"}.
|
||||
{"Password Verification","Проверка на паролата"}.
|
||||
{"Password Verification:","Проверка на паролата:"}.
|
||||
{"Password","Парола"}.
|
||||
{"Password:","Парола:"}.
|
||||
{"Path to Dir","Път към директория"}.
|
||||
{"Path to File","Път до файл"}.
|
||||
{"Payload semantic type information","Информация за семантичен тип полезен товар"}.
|
||||
{"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","Времето на предишната сесия изтече"}.
|
||||
{"private, ","частна, "}.
|
||||
{"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 акаунт"}.
|
||||
{"Register","Регистрирай"}.
|
||||
{"Remote copy","Отдалечено копие"}.
|
||||
{"Remove a hat from a user","Премахни шапка от потребител"}.
|
||||
{"Remove User","Премахни потребител"}.
|
||||
{"Replaced by new connection","Заменен от нова връзка"}.
|
||||
{"Request has timed out","Времето за заявка изтече"}.
|
||||
{"Request is ignored","Заявката е игнорирано"}.
|
||||
{"Requested role","Заявена роля"}.
|
||||
{"Resources","Ресурси"}.
|
||||
{"Restart Service","Рестартирай услугата"}.
|
||||
{"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 size","Размер на списъка с контакти"}.
|
||||
{"Running Nodes","Работещи нодове"}.
|
||||
{"~s invites you to the room ~s","~s ви кани в стая ~s"}.
|
||||
{"Saturday","Събота"}.
|
||||
{"Search from the date","Търси от дата"}.
|
||||
{"Search Results for ","Резултати от търсенето за "}.
|
||||
{"Search the text","Търси текста"}.
|
||||
{"Search until the date","Търси до дата"}.
|
||||
{"Search users in ","Търси потребители в "}.
|
||||
{"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 Occupants Join/Leave","Покажи участници Влязъл/Напускнал"}.
|
||||
{"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 на собственика(ците) на нода"}.
|
||||
{"Stopped Nodes","Спрени нодове"}.
|
||||
{"Store binary backup:","Запази бинарен архив:"}.
|
||||
{"Store plain text backup:","Запази архив като обикновен текст:"}.
|
||||
{"Stream management is already enabled","Управлението на потока вече е активирано"}.
|
||||
{"Stream management is not enabled","Управлението на потока не е активирано"}.
|
||||
{"Subject","Тема"}.
|
||||
{"Submitted","Изпратено"}.
|
||||
{"Subscriber Address","Адрес на абоната"}.
|
||||
{"Subscribers may publish","Абонатите могат да публикуват"}.
|
||||
{"Subscription requests must be approved and only subscribers may retrieve items","Заявките за абонамент трябва да бъдат одобрени и само абонатите могат да извличат елементи"}.
|
||||
{"Subscriptions are not allowed","Абонаментите не са разрешени"}.
|
||||
{"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 child nodes (leaf or collection) associated with a collection","Дъщерните нодове (листови или колекция), свързани с колекция"}.
|
||||
{"The collections with which a node is affiliated","Колекциите, с които даден нод е свързан"}.
|
||||
{"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 list of JIDs that may associate leaf nodes with a collection","Списъкът с JID, които могат да асоциират листови нодове с колекция"}.
|
||||
{"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 node is a leaf node (default)","Нодът е листов (по подразбиране)"}.
|
||||
{"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 is","паролата е"}.
|
||||
{"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 subscription identifier associated with the subscription request","Идентификаторът на абонамента, свързан със заявката за абонамент"}.
|
||||
{"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: ","Възникна грешка при промяна на паролата: "}.
|
||||
{"There was an error creating the account: ","Възникна грешка при създаването на профила: "}.
|
||||
{"There was an error deleting the account: ","Възникна грешка при изтриването на профила: "}.
|
||||
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","Не е чувствително към регистъра (главни и малки букви): \"macbeth\"е същото като \"MacBeth\"и \"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.","Тази страница позволява регистриране на XMPP профил на този сървър. Вашият JID (Jabber ID) ще бъде във формата: username@server. Моля, прочетете внимателно инструкциите, за да попълните правилно полетата."}.
|
||||
{"This page allows to unregister an XMPP account in this XMPP server.","Тази страница позволява премахване на XMPP профил от този сървър."}.
|
||||
{"This room is not anonymous","Тази стая не е анонимна"}.
|
||||
{"This service can not process the address: ~s","Тази услуга не може да обработи адреса: ~s"}.
|
||||
{"Thursday","Четвъртък"}.
|
||||
{"Time delay","Закъснение"}.
|
||||
{"Timed out waiting for stream resumption","Времето за изчакване за възобновяване на потока изтече"}.
|
||||
{"To register, visit ~s","За да се регистрирате, посетете ~s"}.
|
||||
{"To ~ts","До ~ts"}.
|
||||
{"Token TTL","Токен TTL"}.
|
||||
{"Too many active bytestreams","Твърде много активни \"bytestreams\" потоци"}.
|
||||
{"Too many CAPTCHA requests","Твърде много CAPTCHA заявки"}.
|
||||
{"Too many child elements","Твърде много дъщерни елементи"}.
|
||||
{"Too many <item/> elements","Твърде много <item/> елементи"}.
|
||||
{"Too many <list/> elements","Твърде много <list/> елементи"}.
|
||||
{"Too many (~p) failed authentications from this IP address (~s). The address will be unblocked at ~s UTC","Твърде много (~p) неуспешни опити за удостоверявания от този IP адрес (~s). Адресът ще бъде деблокиран в ~s UTC"}.
|
||||
{"Too many receiver fields were specified","Посочени са твърде много полета за получател"}.
|
||||
{"Too many unacked stanzas","Твърде много непотвърдени строфи"}.
|
||||
{"Too many users in this conference","Твърде много потребители в тази конференция"}.
|
||||
{"Traffic rate limit is exceeded","Лимитът за трафик е надвишен"}.
|
||||
{"~ts's MAM Archive","~ts's MAM архив"}.
|
||||
{"~ts's Offline Messages Queue","Офлайн съобщения на ~ts"}.
|
||||
{"Tuesday","Вторник"}.
|
||||
{"Unable to generate a CAPTCHA","Не може да се генерира CAPTCHA"}.
|
||||
{"Unable to register route on existing local domain","Не може да се регистрира маршрут в съществуващ локален домейн"}.
|
||||
{"Unauthorized","Неоторизиран"}.
|
||||
{"Unexpected action","Неочаквано действие"}.
|
||||
{"Unexpected error condition: ~p","Неочаквано състояние на грешка: ~p"}.
|
||||
{"Uninstall","Деинсталирай"}.
|
||||
{"Unregister an XMPP account","Дерегистрирай XMPP профил"}.
|
||||
{"Unregister","Дерегистрирай"}.
|
||||
{"Unsupported <index/> element","Неподдържан елемент <index/>"}.
|
||||
{"Unsupported version","Неподдържана версия"}.
|
||||
{"Update message of the day (don't send)","Актуализирай съобщението на деня (не изпращай)"}.
|
||||
{"Update message of the day on all hosts (don't send)","Актуализирай съобщението на деня на всички хостове (не изпращай)"}.
|
||||
{"Update specs to get modules source, then install desired ones.","Актуализирайте спецификациите, за да получите източник на модули, след което инсталирайте желаните."}.
|
||||
{"Update Specs","Актуализирай спецификациите"}.
|
||||
{"Updating the vCard is not supported by the vCard storage backend","Актуализирането на vCard не се поддържа от настройката за съхранение на vCard"}.
|
||||
{"Upgrade","Обнови"}.
|
||||
{"URL for Archived Discussion Logs","URL адрес за дневници на архивирани дискусии"}.
|
||||
{"User already exists","Потребителят вече съществува"}.
|
||||
{"User (jid)","Потребител (jid)"}.
|
||||
{"User JID","Потребител JID"}.
|
||||
{"User Management","Управление на потребители"}.
|
||||
{"User not allowed to perform an IQ set on another user's vCard.","Потребителят не може да извършва IQ настрийка на vCard на друг потребител."}.
|
||||
{"User removed","Потребителят е премахнат"}.
|
||||
{"User session not found","Потребителската сесия не е намерена"}.
|
||||
{"User session terminated","Потребителската сесия е прекратена"}.
|
||||
{"User ~ts","Потребител ~ts"}.
|
||||
{"Username:","Потребителско име:"}.
|
||||
{"Users are not allowed to register accounts so quickly","Не е разрешено потребителите да регистрират профили толкова бързо"}.
|
||||
{"Users Last Activity","Последна активност на потребителите"}.
|
||||
{"Users","Потребители"}.
|
||||
{"User","Потребител"}.
|
||||
{"Value 'get' of 'type' attribute is not allowed","Стойността 'get' на атрибут 'type' не е разрешена"}.
|
||||
{"Value of '~s' should be boolean","Стойността на '~s' трябва да е булева"}.
|
||||
{"Value of '~s' should be datetime string","Стойността на '~s' трябва да бъде низ за дата и час"}.
|
||||
{"Value of '~s' should be integer","Стойността на '~s' трябва да бъде цяло число"}.
|
||||
{"Value 'set' of 'type' attribute is not allowed","Стойността 'set' на атрибут 'type' не е разрешена"}.
|
||||
{"vCard User Search","vCard търсене на потребител"}.
|
||||
{"View joined MIX channels","Вижте присъединените MIX канали"}.
|
||||
{"Virtual Hosts","Виртуални хостове"}.
|
||||
{"Visitors are not allowed to change their nicknames in this room","Посетителите нямат право да променят псевдонимите си в тази стая"}.
|
||||
{"Visitors are not allowed to send messages to all occupants","На посетителите не е разрешено да изпращат съобщения до всички участници"}.
|
||||
{"Visitor","Посетител"}.
|
||||
{"Voice requests are disabled in this conference","Гласовите обаждания са деактивирани в тази конференция"}.
|
||||
{"Voice request","Заявка за гласово обаждане"}.
|
||||
{"Wednesday","Сряда"}.
|
||||
{"When a new subscription is processed and whenever a subscriber comes online","Когато се обработва нов абонамент и всеки път, когато абонат се появи онлайн"}.
|
||||
{"When a new subscription is processed","Когато се обработва нов абонамент"}.
|
||||
{"When to send the last published item","Кога да изпратите последния публикуван елемент"}.
|
||||
{"Whether an entity wants to receive an XMPP message body in addition to the payload format","Дали даден обект иска да получи тяло на XMPP съобщение в допълнение към формата на полезен товар"}.
|
||||
{"Whether an entity wants to receive digests (aggregations) of notifications or all notifications individually","Дали даден обект желае да получава обобщения за известия или всички известия поотделно"}.
|
||||
{"Whether an entity wants to receive or disable notifications","Дали даден обект желае да получава или деактивира известия"}.
|
||||
{"Whether owners or publisher should receive replies to items","Дали собствениците или публикуващите трябва да получават отговори на елементи"}.
|
||||
{"Whether the node is a leaf (default) or a collection","Дали нодът е листов (по подразбиране) или колекция"}.
|
||||
{"Whether to allow subscriptions","Дали да се разрешат абонаменти"}.
|
||||
{"Whether to make all subscriptions temporary, based on subscriber presence","Дали всички абонаменти да бъдат временни въз основа на присъствието на абонат"}.
|
||||
{"Whether to notify owners about new subscribers and unsubscribes","Дали да се уведомяват собствениците за нови абонати и откази от абонамент"}.
|
||||
{"Who can send private messages","Кой може да изпраща лични съобщения"}.
|
||||
{"Who may associate leaf nodes with a collection","Кой може да асоциира листови нодове с колекция"}.
|
||||
{"Wrong parameters in the web formulary","Грешни параметри в уеб формуляра"}.
|
||||
{"Wrong xmlns","Грешен xmlns"}.
|
||||
{"XMPP Account Registration","Регистриране на XMPP профил"}.
|
||||
{"XMPP Domains","XMPP домейни"}.
|
||||
{"XMPP Show Value of Away","XMPP покажи стойност на Отсъства"}.
|
||||
{"XMPP Show Value of Chat","XMPP покажи стойност на Чат"}.
|
||||
{"XMPP Show Value of DND (Do Not Disturb)","XMPP покажи стойност на DND (Не ме безпокой)"}.
|
||||
{"XMPP Show Value of XA (Extended Away)","XMPP покажи стойност на Продължително отсъствие"}.
|
||||
{"XMPP URI of Associated Publish-Subscribe Node","XMPP URI на асоцииран Publish-Subscribe нод"}.
|
||||
{"You are being removed from the room because of a system shutdown","Премахнати сте от стаята поради изключване на системата"}.
|
||||
{"You are not allowed to send private messages","Нямате право да изпращате лични съобщения"}.
|
||||
{"You are not joined to the channel","Не сте присъединени към канала"}.
|
||||
{"You can later change your password using an XMPP client.","По-късно можете да промените паролата си с помощта на XMPP клиент."}.
|
||||
{"You have been banned from this room","Достъпът ви до тази стая е забранен"}.
|
||||
{"You have joined too many conferences","Присъединили сте се към твърде много конференции"}.
|
||||
{"You must fill in field \"Nickname\" in the form","Трябва да попълните полето \"Псевдоним\" във формата"}.
|
||||
{"You need a client that supports x:data and CAPTCHA to register","За да се регистрирате Ви е нужен клиент, който поддържа x:data и CAPTCHA"}.
|
||||
{"You need a client that supports x:data to register the nickname","За да регистрирате псевдонима, Ви е необходим клиент, който поддържа x:data"}.
|
||||
{"You need an x:data capable client to search","За да търсите, Ви е нужен клиент, който поддържа x:data"}.
|
||||
{"Your active privacy list has denied the routing of this stanza.","Вашият активен списък за поверителност отказа маршрутизирането на тази строфа."}.
|
||||
{"Your contact offline message queue is full. The message has been discarded.","Достигнат е максималният брой офлайн съобщения за вашия контакт. Съобщението е отхвърлено."}.
|
||||
{"Your subscription request and/or messages to ~s have been blocked. To unblock your subscription request, visit ~s","Вашата заявка за абонамент и/или съобщения до ~s са блокирани. За да отблокирате заявката си за абонамент, посетете ~s"}.
|
||||
{"Your XMPP account was successfully registered.","Вашият XMPP акаунт, беше регистриран успешно."}.
|
||||
{"Your XMPP account was successfully unregistered.","Вашият XMPP акаунт, беше успешно дерегистриран."}.
|
||||
{"You're not allowed to create nodes","Нямате право да създавате нодове"}.
|
|
@ -12,24 +12,17 @@
|
|||
{"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"}.
|
||||
{"Add a hat to a user","Afegir un barret a un usuari"}.
|
||||
{"Add Jabber ID","Afegir Jabber ID"}.
|
||||
{"Add New","Afegir nou"}.
|
||||
{"Add User","Afegir usuari"}.
|
||||
{"Administration of ","Administració de "}.
|
||||
{"Administration","Administració"}.
|
||||
{"Administrator privileges required","Es necessita tenir privilegis d'administrador"}.
|
||||
{"All activity","Tota l'activitat"}.
|
||||
{"All Users","Tots els usuaris"}.
|
||||
{"Allow subscription","Permetre subscripcions"}.
|
||||
{"Allow subscription","Permetre subscripció"}.
|
||||
{"Allow this Jabber ID to subscribe to this pubsub node?","Permetre que aquesta Jabber ID es puga subscriure a aquest node pubsub?"}.
|
||||
{"Allow this person to register with the room?","Permetre a esta persona registrar-se a la sala?"}.
|
||||
{"Allow users to change the subject","Permetre que els usuaris canviïn el tema"}.
|
||||
|
@ -53,7 +46,9 @@
|
|||
{"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"}.
|
||||
{"API Commands","Comandaments API"}.
|
||||
{"April","Abril"}.
|
||||
{"Arguments","Arguments"}.
|
||||
{"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"}.
|
||||
{"Attribute 'jid' is not allowed here","L'atribut 'jid' no està permès ací"}.
|
||||
|
@ -93,34 +88,25 @@
|
|||
{"Choose whether to approve this entity's subscription.","Tria si aproves aquesta entitat de subscripció."}.
|
||||
{"City","Ciutat"}.
|
||||
{"Client acknowledged more stanzas than sent by server","El client ha reconegut més paquets dels que ha enviat el servidor"}.
|
||||
{"Clustering","Clustering"}.
|
||||
{"Commands","Comandaments"}.
|
||||
{"Conference room does not exist","La sala de conferències no existeix"}.
|
||||
{"Configuration of room ~s","Configuració de la sala ~s"}.
|
||||
{"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"}.
|
||||
{"Database failure","Error a la base de dades"}.
|
||||
{"Database Tables at ~p","Taules de la base de dades en ~p"}.
|
||||
{"Database Tables Configuration at ","Configuració de la base de dades en "}.
|
||||
{"Database","Base de dades"}.
|
||||
{"December","Decembre"}.
|
||||
{"Default users as participants","Els usuaris són participants per defecte"}.
|
||||
{"Delete content","Eliminar contingut"}.
|
||||
{"Delete message of the day on all hosts","Elimina el missatge del dis de tots els hosts"}.
|
||||
{"Delete message of the day","Eliminar el missatge del dia"}.
|
||||
{"Delete Selected","Eliminar els seleccionats"}.
|
||||
{"Delete table","Eliminar taula"}.
|
||||
{"Delete User","Eliminar Usuari"}.
|
||||
{"Deliver event notifications","Entrega de notificacions d'events"}.
|
||||
{"Deliver payloads with event notifications","Enviar payloads junt a les notificacions d'events"}.
|
||||
{"Description:","Descripció:"}.
|
||||
{"Disc only copy","Còpia sols en disc"}.
|
||||
{"'Displayed groups' not added (they do not exist!): ","'Mostrats' no afegits (no existeixen!): "}.
|
||||
{"Displayed:","Mostrats:"}.
|
||||
{"Don't tell your password to anybody, not even the administrators of the XMPP server.","No li donis la teva contrasenya a ningú, ni tan sols als administradors del servidor XMPP."}.
|
||||
{"Dump Backup to Text File at ","Exporta còpia de seguretat a fitxer de text en "}.
|
||||
{"Dump to Text File","Exportar a fitxer de text"}.
|
||||
|
@ -136,7 +122,6 @@
|
|||
{"ejabberd vCard module","ejabberd mòdul vCard"}.
|
||||
{"ejabberd Web Admin","ejabberd Web d'administració"}.
|
||||
{"ejabberd","ejabberd"}.
|
||||
{"Elements","Elements"}.
|
||||
{"Email Address","Adreça de correu"}.
|
||||
{"Email","Correu"}.
|
||||
{"Enable hats","Activar barrets"}.
|
||||
|
@ -151,7 +136,6 @@
|
|||
{"Enter path to text file","Introdueix ruta al fitxer de text"}.
|
||||
{"Enter the text you see","Introdueix el text que veus"}.
|
||||
{"Erlang XMPP Server","Servidor Erlang XMPP"}.
|
||||
{"Error","Error"}.
|
||||
{"Exclude Jabber IDs from CAPTCHA challenge","Excloure Jabber IDs de la comprovació CAPTCHA"}.
|
||||
{"Export all tables as SQL queries to a file:","Exporta totes les taules a un fitxer SQL:"}.
|
||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exportar dades de tots els usuaris del servidor a arxius PIEFXIS (XEP-0227):"}.
|
||||
|
@ -170,7 +154,6 @@
|
|||
{"Fill in the form to search for any matching XMPP User","Emplena camps per a buscar usuaris XMPP que concorden"}.
|
||||
{"Friday","Divendres"}.
|
||||
{"From ~ts","De ~ts"}.
|
||||
{"From","De"}.
|
||||
{"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"}.
|
||||
|
@ -180,23 +163,19 @@
|
|||
{"Get Number of Registered Users","Obtenir Número d'Usuaris Registrats"}.
|
||||
{"Get Pending","Obtenir Pendents"}.
|
||||
{"Get User Last Login Time","Obtenir la última connexió d'Usuari"}.
|
||||
{"Get User Password","Obtenir Contrasenya d'usuari"}.
|
||||
{"Get User Statistics","Obtenir Estadístiques d'Usuari"}.
|
||||
{"Given Name","Nom propi"}.
|
||||
{"Grant voice to this person?","Concedir veu a aquesta persona?"}.
|
||||
{"Group","Grup"}.
|
||||
{"Groups that will be displayed to the members","Grups que seran mostrats als membres"}.
|
||||
{"Groups","Grups"}.
|
||||
{"has been banned","ha sigut bloquejat"}.
|
||||
{"has been kicked because of a system shutdown","ha sigut expulsat perquè el sistema va a apagar-se"}.
|
||||
{"has been kicked because of an affiliation change","ha sigut expulsat a causa d'un canvi d'afiliació"}.
|
||||
{"has been kicked because the room has been changed to members-only","ha sigut expulsat perquè la sala ara és només per a membres"}.
|
||||
{"has been kicked","ha sigut expulsat"}.
|
||||
{"Hash of the vCard-temp avatar of this room","Hash del avatar a vCard-temp d'esta sala"}.
|
||||
{"Hat title","Títol del barret"}.
|
||||
{"Hat URI","URI del barret"}.
|
||||
{"Hats limit exceeded","El límit de tràfic ha sigut sobrepassat"}.
|
||||
{"Host unknown","Host desconegut"}.
|
||||
{"Host","Host"}.
|
||||
{"HTTP File Upload","HTTP File Upload"}.
|
||||
{"Idle connection","Connexió sense us"}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","Si no veus la imatge CAPTCHA açí, visita la pàgina web."}.
|
||||
|
@ -210,7 +189,6 @@
|
|||
{"Import Users From jabberd14 Spool Files","Importar usuaris de jabberd14"}.
|
||||
{"Improper domain part of 'from' attribute","La part de domini de l'atribut 'from' es impròpia"}.
|
||||
{"Improper message type","Tipus de missatge incorrecte"}.
|
||||
{"Incoming s2s Connections:","Connexions s2s d'entrada:"}.
|
||||
{"Incorrect CAPTCHA submit","El CAPTCHA proporcionat és incorrecte"}.
|
||||
{"Incorrect data form","El formulari de dades és incorrecte"}.
|
||||
{"Incorrect password","Contrasenya incorrecta"}.
|
||||
|
@ -230,7 +208,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","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"}.
|
||||
|
@ -241,7 +218,6 @@
|
|||
{"July","Juliol"}.
|
||||
{"June","Juny"}.
|
||||
{"Just created","Creació recent"}.
|
||||
{"Label:","Etiqueta:"}.
|
||||
{"Last Activity","Última activitat"}.
|
||||
{"Last login","Últim login"}.
|
||||
{"Last message","Últim missatge"}.
|
||||
|
@ -249,11 +225,10 @@
|
|||
{"Last year","Últim any"}.
|
||||
{"Least significant bits of SHA-256 hash of text should equal hexadecimal label","Els bits menys significants del hash SHA-256 del text deurien ser iguals a l'etiqueta hexadecimal"}.
|
||||
{"leaves the room","surt de la sala"}.
|
||||
{"List of rooms","Llista de sales"}.
|
||||
{"List of users with hats","Llista d'usuaris amb barrets"}.
|
||||
{"List users with hats","Llista d'usuaris amb barrets"}.
|
||||
{"Logged Out","Desconectat"}.
|
||||
{"Logging","Registre"}.
|
||||
{"Low level update script","Script d'actualització de baix nivell"}.
|
||||
{"Make participants list public","Crear una llista de participants pública"}.
|
||||
{"Make room CAPTCHA protected","Crear una sala protegida per CAPTCHA"}.
|
||||
{"Make room members-only","Crear una sala només per a membres"}.
|
||||
|
@ -271,11 +246,8 @@
|
|||
{"Maximum number of items to persist","Número màxim d'elements que persistixen"}.
|
||||
{"Maximum Number of Occupants","Número màxim d'ocupants"}.
|
||||
{"May","Maig"}.
|
||||
{"Members not added (inexistent vhost!): ","Membres no afegits (perquè el vhost no existeix): "}.
|
||||
{"Membership is required to enter this room","Necessites ser membre d'aquesta sala per a poder entrar"}.
|
||||
{"Members:","Membre:"}.
|
||||
{"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.","Memoritza la teva contrasenya, o escriu-la en un paper guardat a un lloc segur. A XMPP no hi ha una forma automatitzada de recuperar la teva contrasenya si la oblides."}.
|
||||
{"Memory","Memòria"}.
|
||||
{"Mere Availability in XMPP (No Show Value)","Simplement disponibilitat a XMPP (sense valor de 'show')"}.
|
||||
{"Message body","Missatge"}.
|
||||
{"Message not found in forwarded payload","Missatge no trobat al contingut reenviat"}.
|
||||
|
@ -287,15 +259,12 @@
|
|||
{"Moderator privileges required","Es necessita tenir privilegis de moderador"}.
|
||||
{"Moderator","Moderador"}.
|
||||
{"Moderators Only","Només moderadors"}.
|
||||
{"Modified modules","Mòduls modificats"}.
|
||||
{"Module failed to handle the query","El modul ha fallat al gestionar la petició"}.
|
||||
{"Monday","Dilluns"}.
|
||||
{"Multicast","Multicast"}.
|
||||
{"Multiple <item/> elements are not allowed by RFC6121","No estan permesos múltiples elements <item/> per RFC6121"}.
|
||||
{"Multi-User Chat","Multi-Usuari Converses"}.
|
||||
{"Name in the rosters where this group will be displayed","Nom a les llistes de contactes on es mostrarà aquest grup"}.
|
||||
{"Name","Nom"}.
|
||||
{"Name:","Nom:"}.
|
||||
{"Natural Language for Room Discussions","Llengua natural per a les discussions a les sales"}.
|
||||
{"Natural-Language Room Name","Nom de la sala a la seua llengua natural"}.
|
||||
{"Neither 'jid' nor 'nick' attribute found","No s'han trobat els atributs 'jid' ni 'nick'"}.
|
||||
|
@ -360,14 +329,10 @@
|
|||
{"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:"}.
|
||||
{"Offline Messages","Missatges offline"}.
|
||||
{"OK","Acceptar"}.
|
||||
{"Old Password:","Antiga contrasenya:"}.
|
||||
{"Online Users","Usuaris conectats"}.
|
||||
{"Online Users:","Usuaris en línia:"}.
|
||||
{"Online","Connectat"}.
|
||||
{"Only admins can see this","Només els administradors poden veure esto"}.
|
||||
{"Only collection node owners may associate leaf nodes with the collection","Només els propietaris de la col·lecció de nodes poden associar nodes fulla amb la col·lecció"}.
|
||||
{"Only deliver notifications to available users","Sols enviar notificacions als usuaris disponibles"}.
|
||||
{"Only <enable/> or <disable/> tags are allowed","Només es permeten etiquetes <enable/> o <disable/>"}.
|
||||
|
@ -375,6 +340,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"}.
|
||||
|
@ -385,11 +351,9 @@
|
|||
{"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"}.
|
||||
|
@ -398,8 +362,7 @@
|
|||
{"Password:","Contrasenya:"}.
|
||||
{"Path to Dir","Ruta al directori"}.
|
||||
{"Path to File","Ruta al fitxer"}.
|
||||
{"Payload type","Tipus de payload"}.
|
||||
{"Pending","Pendent"}.
|
||||
{"Payload semantic type information","Informació sobre el tipus semàntic de la carrega útil"}.
|
||||
{"Period: ","Període: "}.
|
||||
{"Persist items to storage","Persistir elements al guardar"}.
|
||||
{"Persistent","Persistent"}.
|
||||
|
@ -433,26 +396,22 @@
|
|||
{"Receive notification of new nodes only","Rebre notificació només de nous nodes"}.
|
||||
{"Recipient is not in the conference room","El receptor no està en la sala de conferència"}.
|
||||
{"Register an XMPP account","Registrar un compte XMPP"}.
|
||||
{"Registered Users","Usuaris registrats"}.
|
||||
{"Registered Users:","Usuaris registrats:"}.
|
||||
{"Register","Registrar"}.
|
||||
{"Remote copy","Còpia remota"}.
|
||||
{"Remove a hat from a user","Eliminar un barret d'un usuari"}.
|
||||
{"Remove All Offline Messages","Eliminar tots els missatges offline"}.
|
||||
{"Remove User","Eliminar usuari"}.
|
||||
{"Remove","Borrar"}.
|
||||
{"Replaced by new connection","Reemplaçat per una nova connexió"}.
|
||||
{"Request has timed out","La petició ha caducat"}.
|
||||
{"Request is ignored","La petició ha sigut ignorada"}.
|
||||
{"Requested role","Rol sol·licitat"}.
|
||||
{"Resources","Recursos"}.
|
||||
{"Restart Service","Reiniciar el Servei"}.
|
||||
{"Restart","Reiniciar"}.
|
||||
{"Restore Backup from File at ","Restaura còpia de seguretat des del fitxer en "}.
|
||||
{"Restore binary backup after next ejabberd restart (requires less memory):","Restaurar una còpia de seguretat binària després de reiniciar el ejabberd (requereix menys memòria:"}.
|
||||
{"Restore binary backup immediately:","Restaurar una còpia de seguretat binària ara mateix:"}.
|
||||
{"Restore plain text backup immediately:","Restaurar una còpia de seguretat en format de text pla ara mateix:"}.
|
||||
{"Restore","Restaurar"}.
|
||||
{"Result","Resultat"}.
|
||||
{"Roles and Affiliations that May Retrieve Member List","Rols i Afiliacions que poden recuperar la llista de membres"}.
|
||||
{"Roles for which Presence is Broadcasted","Rols per als que sí se difon la seua presencia"}.
|
||||
{"Roles that May Send Private Messages","Rols que poden enviar missatges privats"}.
|
||||
|
@ -463,20 +422,15 @@
|
|||
{"Room terminates","La sala està terminant"}.
|
||||
{"Room title","Títol de la sala"}.
|
||||
{"Roster groups allowed to subscribe","Llista de grups que tenen permés subscriures"}.
|
||||
{"Roster of ~ts","Llista de contactes de ~ts"}.
|
||||
{"Roster size","Mida de la llista"}.
|
||||
{"Roster:","Llista de contactes:"}.
|
||||
{"RPC Call Error","Error de cridada RPC"}.
|
||||
{"Running Nodes","Nodes funcionant"}.
|
||||
{"~s invites you to the room ~s","~s et convida a la sala ~s"}.
|
||||
{"Saturday","Dissabte"}.
|
||||
{"Script check","Comprovar script"}.
|
||||
{"Search from the date","Buscar des de la data"}.
|
||||
{"Search Results for ","Resultats de la búsqueda "}.
|
||||
{"Search the text","Buscar el text"}.
|
||||
{"Search until the date","Buscar fins la data"}.
|
||||
{"Search users in ","Cerca usuaris en "}.
|
||||
{"Select All","Seleccionar Tots"}.
|
||||
{"Send announcement to all online users on all hosts","Enviar anunci a tots els usuaris connectats a tots els hosts"}.
|
||||
{"Send announcement to all online users","Enviar anunci a tots els usuaris connectats"}.
|
||||
{"Send announcement to all users on all hosts","Enviar anunci a tots els usuaris de tots els hosts"}.
|
||||
|
@ -489,6 +443,7 @@
|
|||
{"Set message of the day on all hosts and send to online users","Escriure missatge del dia en tots els hosts i enviar-ho als usuaris connectats"}.
|
||||
{"Shared Roster Groups","Grups de contactes compartits"}.
|
||||
{"Show Integral Table","Mostrar Taula Integral"}.
|
||||
{"Show Occupants Join/Leave","Mostrar Entrades/Eixides dels Ocupants"}.
|
||||
{"Show Ordinary Table","Mostrar Taula Ordinaria"}.
|
||||
{"Shut Down Service","Apager el Servei"}.
|
||||
{"SOCKS5 Bytestreams","SOCKS5 Bytestreams"}.
|
||||
|
@ -497,25 +452,20 @@
|
|||
{"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"}.
|
||||
{"Statistics","Estadístiques"}.
|
||||
{"Stop","Detindre"}.
|
||||
{"Stopped Nodes","Nodes parats"}.
|
||||
{"Storage Type","Tipus d'emmagatzematge"}.
|
||||
{"Store binary backup:","Guardar una còpia de seguretat binària:"}.
|
||||
{"Store plain text backup:","Guardar una còpia de seguretat en format de text pla:"}.
|
||||
{"Stream management is already enabled","L'administració de la connexió (stream management) ja està activada"}.
|
||||
{"Stream management is not enabled","L'administració de la conexió (stream management) no està activada"}.
|
||||
{"Subject","Tema"}.
|
||||
{"Submit","Enviar"}.
|
||||
{"Submitted","Enviat"}.
|
||||
{"Subscriber Address","Adreça del Subscriptor"}.
|
||||
{"Subscribers may publish","Els subscriptors poden publicar"}.
|
||||
{"Subscription requests must be approved and only subscribers may retrieve items","Les peticiones de subscripció han de ser aprovades i només els subscriptors poden recuperar elements"}.
|
||||
{"Subscriptions are not allowed","Les subscripcions no estan permeses"}.
|
||||
{"Subscription","Subscripció"}.
|
||||
{"Sunday","Diumenge"}.
|
||||
{"Text associated with a picture","Text associat amb una imatge"}.
|
||||
{"Text associated with a sound","Text associat amb un so"}.
|
||||
|
@ -561,10 +511,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: "}.
|
||||
|
@ -578,7 +528,6 @@
|
|||
{"Thursday","Dijous"}.
|
||||
{"Time delay","Temps de retard"}.
|
||||
{"Timed out waiting for stream resumption","Massa temps esperant que es resumisca la connexió"}.
|
||||
{"Time","Data"}.
|
||||
{"To register, visit ~s","Per a registrar-te, visita ~s"}.
|
||||
{"To ~ts","A ~ts"}.
|
||||
{"Token TTL","Token TTL"}.
|
||||
|
@ -591,13 +540,8 @@
|
|||
{"Too many receiver fields were specified","S'han especificat massa camps de receptors"}.
|
||||
{"Too many unacked stanzas","Massa missatges sense haver reconegut la seva recepció"}.
|
||||
{"Too many users in this conference","N'hi ha massa usuaris en esta sala de conferència"}.
|
||||
{"To","Per a"}.
|
||||
{"Total rooms","Sales totals"}.
|
||||
{"Traffic rate limit is exceeded","El límit de tràfic ha sigut sobrepassat"}.
|
||||
{"Transactions Aborted:","Transaccions Avortades:"}.
|
||||
{"Transactions Committed:","Transaccions Realitzades:"}.
|
||||
{"Transactions Logged:","Transaccions registrades:"}.
|
||||
{"Transactions Restarted:","Transaccions reiniciades:"}.
|
||||
{"~ts's MAM Archive","Arxiu MAM de ~ts"}.
|
||||
{"~ts's Offline Messages Queue","~ts's cua de missatges offline"}.
|
||||
{"Tuesday","Dimarts"}.
|
||||
{"Unable to generate a CAPTCHA","No s'ha pogut generar un CAPTCHA"}.
|
||||
|
@ -608,24 +552,20 @@
|
|||
{"Uninstall","Desinstal·lar"}.
|
||||
{"Unregister an XMPP account","Anul·lar el registre d'un compte XMPP"}.
|
||||
{"Unregister","Anul·lar el registre"}.
|
||||
{"Unselect All","Deseleccionar tots"}.
|
||||
{"Unsupported <index/> element","Element <index/> no soportat"}.
|
||||
{"Unsupported version","Versió no suportada"}.
|
||||
{"Update message of the day (don't send)","Actualitzar el missatge del dia (no enviar)"}.
|
||||
{"Update message of the day on all hosts (don't send)","Actualitza el missatge del dia en tots els hosts (no enviar)"}.
|
||||
{"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"}.
|
||||
{"Updating the vCard is not supported by the vCard storage backend","El sistema d'almacenament de vCard no te capacitat per a actualitzar la vCard"}.
|
||||
{"Upgrade","Actualitza"}.
|
||||
{"Uptime:","Temps en marxa:"}.
|
||||
{"URL for Archived Discussion Logs","URL dels Arxius de Discussions"}.
|
||||
{"User already exists","El usuari ja existeix"}.
|
||||
{"User JID","JID del usuari"}.
|
||||
{"User (jid)","Usuari (jid)"}.
|
||||
{"User Management","Gestió d'Usuaris"}.
|
||||
{"User not allowed to perform an IQ set on another user's vCard.","L'usuari no te permis per a modificar la vCard d'altre usuari."}.
|
||||
{"User removed","Usuari borrat"}.
|
||||
{"User session not found","Sessió d'usuari no trobada"}.
|
||||
{"User session terminated","Sessió d'usuari terminada"}.
|
||||
|
@ -635,7 +575,6 @@
|
|||
{"Users Last Activity","Última activitat d'usuari"}.
|
||||
{"Users","Usuaris"}.
|
||||
{"User","Usuari"}.
|
||||
{"Validate","Validar"}.
|
||||
{"Value 'get' of 'type' attribute is not allowed","El valor 'get' a l'atribut 'type' no és permès"}.
|
||||
{"Value of '~s' should be boolean","El valor de '~s' deuria ser booleà"}.
|
||||
{"Value of '~s' should be datetime string","El valor de '~s' deuria ser una data"}.
|
||||
|
@ -643,14 +582,13 @@
|
|||
{"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"}.
|
||||
{"Visitors are not allowed to change their nicknames in this room","Els visitants no tenen permés canviar el seus Nicknames en esta sala"}.
|
||||
{"Visitors are not allowed to send messages to all occupants","Els visitants no poden enviar missatges a tots els ocupants"}.
|
||||
{"Visitor","Visitant"}.
|
||||
{"Voice request","Petició de veu"}.
|
||||
{"Voice requests are disabled in this conference","Les peticions de veu es troben desactivades en aquesta conferència"}.
|
||||
{"Web client which allows to join the room anonymously","Client web que permet entrar a la sala anonimament"}.
|
||||
{"Wednesday","Dimecres"}.
|
||||
{"When a new subscription is processed and whenever a subscriber comes online","Quan es processa una nova subscripció i un subscriptor es connecta"}.
|
||||
{"When a new subscription is processed","Quan es processa una nova subscripció"}.
|
||||
|
@ -660,9 +598,10 @@
|
|||
{"Whether an entity wants to receive or disable notifications","Si una entitat vol rebre notificacions o no"}.
|
||||
{"Whether owners or publisher should receive replies to items","Si el propietaris o publicadors deurien de rebre respostes als elements"}.
|
||||
{"Whether the node is a leaf (default) or a collection","Si el node es fulla (per defecte) o es una col·lecció"}.
|
||||
{"Whether to allow subscriptions","Permetre subscripcions"}.
|
||||
{"Whether to allow subscriptions","Si s'hauria de 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"}.
|
||||
|
@ -674,6 +613,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"}.
|
||||
|
|
|
@ -9,8 +9,6 @@
|
|||
{"Accept","Přijmout"}.
|
||||
{"Access denied by service policy","Přístup byl zamítnut nastavením služby"}.
|
||||
{"Action on user","Akce aplikovaná na uživatele"}.
|
||||
{"Add Jabber ID","Přidat Jabber ID"}.
|
||||
{"Add New","Přidat nový"}.
|
||||
{"Add User","Přidat uživatele"}.
|
||||
{"Administration of ","Administrace "}.
|
||||
{"Administration","Administrace"}.
|
||||
|
@ -60,22 +58,17 @@
|
|||
{"Conference room does not exist","Místnost neexistuje"}.
|
||||
{"Configuration of room ~s","Konfigurace místnosti ~s"}.
|
||||
{"Configuration","Konfigurace"}.
|
||||
{"Connected Resources:","Připojené zdroje:"}.
|
||||
{"Country","Země"}.
|
||||
{"CPU Time:","Čas procesoru:"}.
|
||||
{"Database failure","Chyba databáze"}.
|
||||
{"Database Tables at ~p","Databázové tabulky na ~p"}.
|
||||
{"Database Tables Configuration at ","Konfigurace databázových tabulek "}.
|
||||
{"Database","Databáze"}.
|
||||
{"December",". prosince"}.
|
||||
{"Default users as participants","Uživatelé jsou implicitně členy"}.
|
||||
{"Delete message of the day on all hosts","Smazat zprávu dne na všech hostitelích"}.
|
||||
{"Delete message of the day","Smazat zprávu dne"}.
|
||||
{"Delete Selected","Smazat vybrané"}.
|
||||
{"Delete User","Smazat uživatele"}.
|
||||
{"Deliver event notifications","Doručovat upozornění na události"}.
|
||||
{"Deliver payloads with event notifications","Doručovat náklad s upozorněním na událost"}.
|
||||
{"Description:","Popis:"}.
|
||||
{"Disc only copy","Jen kopie disku"}.
|
||||
{"Dump Backup to Text File at ","Uložit zálohu do textového souboru na "}.
|
||||
{"Dump to Text File","Uložit do textového souboru"}.
|
||||
|
@ -87,7 +80,6 @@
|
|||
{"ejabberd SOCKS5 Bytestreams module","ejabberd SOCKS5 Bytestreams modul"}.
|
||||
{"ejabberd vCard module","ejabberd vCard modul"}.
|
||||
{"ejabberd Web Admin","Webová administrace ejabberd"}.
|
||||
{"Elements","Položek"}.
|
||||
{"Email","E-mail"}.
|
||||
{"Enable logging","Zaznamenávat konverzace"}.
|
||||
{"Enable message archiving","Povolit ukládání historie zpráv"}.
|
||||
|
@ -99,7 +91,6 @@
|
|||
{"Enter path to jabberd14 spool file","Zadejte cestu k spool souboru jabberd14"}.
|
||||
{"Enter path to text file","Zadajte cestu k textovému souboru"}.
|
||||
{"Enter the text you see","Zadejte text, který vidíte"}.
|
||||
{"Error","Chyba"}.
|
||||
{"Exclude Jabber IDs from CAPTCHA challenge","Vyloučit Jabber ID z procesu CAPTCHA ověřování"}.
|
||||
{"Export all tables as SQL queries to a file:","Zálohovat všechny tabulky jako SQL dotazy do souboru:"}.
|
||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exportovat všechny uživatele do souboru ve formátu PIEFXIS (XEP-0227):"}.
|
||||
|
@ -115,24 +106,20 @@
|
|||
{"February",". února"}.
|
||||
{"File larger than ~w bytes","Soubor větší než ~w bytů"}.
|
||||
{"Friday","Pátek"}.
|
||||
{"From","Od"}.
|
||||
{"From ~ts","Od ~ts"}.
|
||||
{"Full Name","Celé jméno"}.
|
||||
{"Get Number of Online Users","Získat počet online uživatelů"}.
|
||||
{"Get Number of Registered Users","Získat počet registrovaných uživatelů"}.
|
||||
{"Get User Last Login Time","Získat čas podleního přihlášení uživatele"}.
|
||||
{"Get User Password","Získat heslo uživatele"}.
|
||||
{"Get User Statistics","Získat statistiky uživatele"}.
|
||||
{"Given Name","Křestní jméno"}.
|
||||
{"Grant voice to this person?","Udělit voice práva této osobě?"}.
|
||||
{"Group","Skupina"}.
|
||||
{"Groups","Skupiny"}.
|
||||
{"has been banned","byl(a) zablokován(a)"}.
|
||||
{"has been kicked because of a system shutdown","byl(a) vyhozen(a), protože dojde k vypnutí systému"}.
|
||||
{"has been kicked because of an affiliation change","byl(a) vyhozen(a) kvůli změně přiřazení"}.
|
||||
{"has been kicked because the room has been changed to members-only","byl(a) vyhozen(a), protože mísnost je nyní pouze pro členy"}.
|
||||
{"has been kicked","byl(a) vyhozen(a) z místnosti"}.
|
||||
{"Host unknown","Neznámý hostitel"}.
|
||||
{"Host","Hostitel"}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","Pokud zde nevidíte obrázek CAPTCHA, přejděte na webovou stránku."}.
|
||||
{"Import Directory","Import adresáře"}.
|
||||
{"Import File","Import souboru"}.
|
||||
|
@ -144,24 +131,24 @@
|
|||
{"Import Users From jabberd14 Spool Files","Importovat uživatele z jabberd14 spool souborů"}.
|
||||
{"Improper domain part of 'from' attribute","Nesprávná část s doménou atributu 'from'"}.
|
||||
{"Improper message type","Nesprávný typ zprávy"}.
|
||||
{"Incoming s2s Connections:","Příchozí s2s spojení:"}.
|
||||
{"Incorrect CAPTCHA submit","Nesprávné odeslání CAPTCHA"}.
|
||||
{"Incorrect data form","Nesprávný datový formulář"}.
|
||||
{"Incorrect password","Nesprávné heslo"}.
|
||||
{"Incorrect value of 'action' attribute","Nesprávná hodnota atributu 'action'"}.
|
||||
{"Incorrect value of 'action' in data form","Nesprávná hodnota atributu 'action' v datovém formuláři"}.
|
||||
{"Incorrect value of 'path' in data form","Nesprávná hodnota atributu 'path' v datovém formuláři"}.
|
||||
{"Installed Modules:","Instalované moduly:"}.
|
||||
{"Insufficient privilege","Nedostatečné oprávnění"}.
|
||||
{"Invalid 'from' attribute in forwarded message","Nesprávný atribut 'from' v přeposlané zprávě"}.
|
||||
{"Invitations are not allowed in this conference","Pozvánky nejsou povoleny v této místnosti"}.
|
||||
{"IP addresses","IP adresy"}.
|
||||
{"is now known as","se přejmenoval(a) na"}.
|
||||
{"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 of type \"groupchat\"","Není dovoleno odeslání soukromých zpráv 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"}.
|
||||
{"Joined MIX channels:","Připojené MIX kanály:"}.
|
||||
{"joins the room","vstoupil(a) do místnosti"}.
|
||||
{"July",". července"}.
|
||||
{"June",". června"}.
|
||||
|
@ -170,8 +157,6 @@
|
|||
{"Last month","Poslední měsíc"}.
|
||||
{"Last year","Poslední rok"}.
|
||||
{"leaves the room","opustil(a) místnost"}.
|
||||
{"List of rooms","Seznam místností"}.
|
||||
{"Low level update script","Nízkoúrovňový aktualizační skript"}.
|
||||
{"Make participants list public","Nastavit seznam účastníků jako veřejný"}.
|
||||
{"Make room CAPTCHA protected","Chránit místnost pomocí CAPTCHA"}.
|
||||
{"Make room members-only","Zpřístupnit místnost jen členům"}.
|
||||
|
@ -182,24 +167,20 @@
|
|||
{"Malformed username","Chybně formátováné jméno uživatele"}.
|
||||
{"March",". března"}.
|
||||
{"Max payload size in bytes","Maximální náklad v bajtech"}.
|
||||
{"Maximum Number of Occupants","Počet účastníků"}.
|
||||
{"Maximum Number of Occupants","Maximální počet účastníků"}.
|
||||
{"May",". května"}.
|
||||
{"Members:","Členové:"}.
|
||||
{"Membership is required to enter this room","Pro vstup do místnosti musíte být členem"}.
|
||||
{"Memory","Paměť"}.
|
||||
{"Message body","Tělo zprávy"}.
|
||||
{"Message not found in forwarded payload","Zpráva nebyla nalezena v přeposlaném obsahu"}.
|
||||
{"Middle Name","Druhé jméno"}.
|
||||
{"Minimum interval between voice requests (in seconds)","Minimální interval mezi žádostmi o voice práva (v sekundách)"}.
|
||||
{"Moderator privileges required","Potřebujete práva moderátora"}.
|
||||
{"Moderator","Moderátor"}.
|
||||
{"Modified modules","Aktualizované moduly"}.
|
||||
{"Module failed to handle the query","Modul chyboval při zpracování dotazu"}.
|
||||
{"Monday","Pondělí"}.
|
||||
{"Multicast","Multicast"}.
|
||||
{"Multi-User Chat","Víceuživatelský chat"}.
|
||||
{"Name","Jméno"}.
|
||||
{"Name:","Jméno:"}.
|
||||
{"Neither 'jid' nor 'nick' attribute found","Nebyl nalezen atribut 'jid' ani 'nick'"}.
|
||||
{"Neither 'role' nor 'affiliation' attribute found","Nebyl nalezen atribut 'role' ani 'affiliation'"}.
|
||||
{"Never","Nikdy"}.
|
||||
|
@ -248,12 +229,9 @@
|
|||
{"Number of online users","Počet online uživatelů"}.
|
||||
{"Number of registered users","Počet registrovaných uživatelů"}.
|
||||
{"October",". října"}.
|
||||
{"Offline Messages","Offline zprávy"}.
|
||||
{"Offline Messages:","Offline zprávy:"}.
|
||||
{"OK","OK"}.
|
||||
{"Old Password:","Současné heslo:"}.
|
||||
{"Online Users","Připojení uživatelé"}.
|
||||
{"Online Users:","Připojení uživatelé:"}.
|
||||
{"Online","Online"}.
|
||||
{"Only deliver notifications to available users","Doručovat upozornění jen právě přihlášeným uživatelům"}.
|
||||
{"Only <enable/> or <disable/> tags are allowed","Pouze značky <enable/> nebo <disable/>jsou povoleny"}.
|
||||
|
@ -267,10 +245,9 @@
|
|||
{"Only service administrators are allowed to send service messages","Pouze správci služby smí odesílat servisní zprávy"}.
|
||||
{"Organization Name","Název firmy"}.
|
||||
{"Organization Unit","Oddělení"}.
|
||||
{"Other Modules Available:","Ostatní dostupné moduly:"}.
|
||||
{"Outgoing s2s Connections","Odchozí s2s spojení"}.
|
||||
{"Outgoing s2s Connections:","Odchozí s2s spojení:"}.
|
||||
{"Owner privileges required","Jsou vyžadována práva vlastníka"}.
|
||||
{"Packet","Paket"}.
|
||||
{"Participant","Účastník"}.
|
||||
{"Password Verification","Ověření hesla"}.
|
||||
{"Password Verification:","Ověření hesla:"}.
|
||||
|
@ -278,7 +255,6 @@
|
|||
{"Password:","Heslo:"}.
|
||||
{"Path to Dir","Cesta k adresáři"}.
|
||||
{"Path to File","Cesta k souboru"}.
|
||||
{"Pending","Čekající"}.
|
||||
{"Period: ","Čas: "}.
|
||||
{"Persist items to storage","Uložit položky natrvalo do úložiště"}.
|
||||
{"Ping query is incorrect","Ping dotaz je nesprávný"}.
|
||||
|
@ -297,17 +273,12 @@
|
|||
{"RAM copy","Kopie RAM"}.
|
||||
{"Really delete message of the day?","Skutečně smazat zprávu dne?"}.
|
||||
{"Recipient is not in the conference room","Příjemce se nenachází v místnosti"}.
|
||||
{"Registered Users","Registrovaní uživatelé"}.
|
||||
{"Registered Users:","Registrovaní uživatelé:"}.
|
||||
{"Register","Zaregistrovat se"}.
|
||||
{"Remote copy","Vzdálená kopie"}.
|
||||
{"Remove All Offline Messages","Odstranit všechny offline zprávy"}.
|
||||
{"Remove User","Odstranit uživatele"}.
|
||||
{"Remove","Odstranit"}.
|
||||
{"Replaced by new connection","Nahrazeno novým spojením"}.
|
||||
{"Resources","Zdroje"}.
|
||||
{"Restart Service","Restartovat službu"}.
|
||||
{"Restart","Restart"}.
|
||||
{"Restore Backup from File at ","Obnovit zálohu ze souboru na "}.
|
||||
{"Restore binary backup after next ejabberd restart (requires less memory):","Obnovit binární zálohu při následujícím restartu ejabberd (vyžaduje méně paměti):"}.
|
||||
{"Restore binary backup immediately:","Okamžitě obnovit binární zálohu:"}.
|
||||
|
@ -321,10 +292,8 @@
|
|||
{"Room title","Název místnosti"}.
|
||||
{"Roster groups allowed to subscribe","Skupiny kontaktů, které mohou odebírat"}.
|
||||
{"Roster size","Velikost seznamu kontaktů"}.
|
||||
{"RPC Call Error","Chyba RPC volání"}.
|
||||
{"Running Nodes","Běžící uzly"}.
|
||||
{"Saturday","Sobota"}.
|
||||
{"Script check","Kontrola skriptu"}.
|
||||
{"Search Results for ","Výsledky hledání pro "}.
|
||||
{"Search users in ","Hledat uživatele v "}.
|
||||
{"Send announcement to all online users on all hosts","Odeslat oznámení všem online uživatelům na všech hostitelích"}.
|
||||
|
@ -334,7 +303,7 @@
|
|||
{"September",". září"}.
|
||||
{"Server:","Server:"}.
|
||||
{"Set message of the day and send to online users","Nastavit zprávu dne a odeslat ji online uživatelům"}.
|
||||
{"Set message of the day on all hosts and send to online users","Nastavit zprávu dne a odeslat ji online uživatelům"}.
|
||||
{"Set message of the day on all hosts and send to online users","Nastavit zprávu dne na všech hostitelích a odeslat ji online uživatelům"}.
|
||||
{"Shared Roster Groups","Skupiny pro sdílený seznam kontaktů"}.
|
||||
{"Show Integral Table","Zobrazit kompletní tabulku"}.
|
||||
{"Show Ordinary Table","Zobrazit běžnou tabulku"}.
|
||||
|
@ -342,38 +311,34 @@
|
|||
{"Specify the access model","Uveďte přístupový model"}.
|
||||
{"Specify the event message type","Zvolte typ zpráv pro události"}.
|
||||
{"Specify the publisher model","Specifikovat model pro publikování"}.
|
||||
{"Statistics of ~p","Statistiky ~p"}.
|
||||
{"Statistics","Statistiky"}.
|
||||
{"Stopped Nodes","Zastavené uzly"}.
|
||||
{"Stop","Stop"}.
|
||||
{"Storage Type","Typ úložiště"}.
|
||||
{"Store binary backup:","Uložit binární zálohu:"}.
|
||||
{"Store plain text backup:","Uložit zálohu do textového souboru:"}.
|
||||
{"Subject","Předmět"}.
|
||||
{"Submit","Odeslat"}.
|
||||
{"Submitted","Odeslané"}.
|
||||
{"Subscriber Address","Adresa odběratele"}.
|
||||
{"Subscription","Přihlášení"}.
|
||||
{"Subscriptions are not allowed","Předplatné není povoleno"}.
|
||||
{"Sunday","Neděle"}.
|
||||
{"That nickname is already in use by another occupant","Přezdívka je již používána jiným členem"}.
|
||||
{"That nickname is registered by another person","Přezdívka je zaregistrována jinou osobou"}.
|
||||
{"The account was not unregistered","Účet nebyl smazán"}.
|
||||
{"The CAPTCHA is valid.","CAPTCHA souhlasí."}.
|
||||
{"The CAPTCHA verification has failed","Ověření CAPTCHA se nezdařilo"}.
|
||||
{"The collections with which a node is affiliated","Kolekce, se kterými je uzel spřízněn"}.
|
||||
{"The feature requested is not supported by the conference","Požadovaná vlastnost není podporována touto místností"}.
|
||||
{"The number of subscribers to the node","Počet odběratelů uzlu"}.
|
||||
{"The password contains unacceptable characters","Heslo obsahuje nepovolené znaky"}.
|
||||
{"The password is too weak","Heslo je příliš slabé"}.
|
||||
{"the password is","heslo je"}.
|
||||
{"The query is only allowed from local users","Dotaz je povolen pouze pro místní uživatele"}.
|
||||
{"The query must not contain <item/> elements","Dotaz nesmí obsahovat elementy <item/>"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","Stanza MUSÍ obsahovat pouze jeden element <active/>, jeden element <default/> nebo jeden element <list/>"}.
|
||||
{"There was an error creating the account: ","Při vytváření účtu došlo k chybě:"}.
|
||||
{"There was an error changing the password: ","Při změně hesla došlo k chybě: "}.
|
||||
{"There was an error creating the account: ","Při vytváření účtu došlo k chybě: "}.
|
||||
{"There was an error deleting the account: ","Při mazání účtu došlo k chybě: "}.
|
||||
{"This room is not anonymous","Tato místnost není anonymní"}.
|
||||
{"Thursday","Čtvrtek"}.
|
||||
{"Time delay","Časový posun"}.
|
||||
{"Time","Čas"}.
|
||||
{"To register, visit ~s","Pokud se chcete zaregistrovat, navštivte ~s"}.
|
||||
{"Token TTL","Token TTL"}.
|
||||
{"Too many active bytestreams","Příliš mnoho aktivních bytestreamů"}.
|
||||
|
@ -383,13 +348,7 @@
|
|||
{"Too many (~p) failed authentications from this IP address (~s). The address will be unblocked at ~s UTC","Příliš mnoho (~p) chybných pokusů o přihlášení z této IP adresy (~s). Adresa bude zablokována do ~s UTC"}.
|
||||
{"Too many unacked stanzas","Příliš mnoho nepotvrzených stanz"}.
|
||||
{"Too many users in this conference","Přiliš mnoho uživatelů v této místnosti"}.
|
||||
{"To","Pro"}.
|
||||
{"Total rooms","Celkem místností"}.
|
||||
{"Traffic rate limit is exceeded","Byl překročen limit"}.
|
||||
{"Transactions Aborted:","Transakcí zrušených:"}.
|
||||
{"Transactions Committed:","Transakcí potvrzených:"}.
|
||||
{"Transactions Logged:","Transakcí zaznamenaných:"}.
|
||||
{"Transactions Restarted:","Transakcí restartovaných:"}.
|
||||
{"Tuesday","Úterý"}.
|
||||
{"Unable to generate a CAPTCHA","Nebylo možné vygenerovat CAPTCHA"}.
|
||||
{"Unable to register route on existing local domain","Není možné zaregistrovat routu na existující místní doménu"}.
|
||||
|
@ -399,11 +358,6 @@
|
|||
{"Unsupported <index/> element","Nepodporovaný <index/> element"}.
|
||||
{"Update message of the day (don't send)","Aktualizovat zprávu dne (neodesílat)"}.
|
||||
{"Update message of the day on all hosts (don't send)","Aktualizovat zprávu dne pro všechny hostitele (neodesílat)"}.
|
||||
{"Update ~p","Aktualizovat ~p"}.
|
||||
{"Update plan","Aktualizovat plán"}.
|
||||
{"Update script","Aktualizované skripty"}.
|
||||
{"Update","Aktualizovat"}.
|
||||
{"Uptime:","Čas běhu:"}.
|
||||
{"User already exists","Uživatel již existuje"}.
|
||||
{"User JID","Jabber ID uživatele"}.
|
||||
{"User (jid)","Uživatel (JID)"}.
|
||||
|
@ -415,7 +369,6 @@
|
|||
{"Users Last Activity","Poslední aktivita uživatele"}.
|
||||
{"Users","Uživatelé"}.
|
||||
{"User","Uživatel"}.
|
||||
{"Validate","Ověřit"}.
|
||||
{"Value 'get' of 'type' attribute is not allowed","Hodnota 'get' atrubutu 'type' není povolena"}.
|
||||
{"Value of '~s' should be boolean","Hodnota '~s' by měla být boolean"}.
|
||||
{"Value of '~s' should be datetime string","Hodnota '~s' by měla být datetime řetězec"}.
|
||||
|
|
|
@ -12,17 +12,10 @@
|
|||
{"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"}.
|
||||
{"Add a hat to a user","Funktion zu einem Benutzer hinzufügen"}.
|
||||
{"Add Jabber ID","Jabber-ID hinzufügen"}.
|
||||
{"Add New","Neue(n) hinzufügen"}.
|
||||
{"Add User","Benutzer hinzufügen"}.
|
||||
{"Administration of ","Administration von "}.
|
||||
{"Administration","Verwaltung"}.
|
||||
|
@ -53,7 +46,9 @@
|
|||
{"Anyone with a presence subscription of both or from may subscribe and retrieve items","Jeder mit einem Präsenzabonnement von beiden oder davon darf Items abonnieren oder abrufen"}.
|
||||
{"Anyone with Voice","Jeder mit Stimme"}.
|
||||
{"Anyone","Jeder"}.
|
||||
{"API Commands","API Befehle"}.
|
||||
{"April","April"}.
|
||||
{"Arguments","Argumente"}.
|
||||
{"Attribute 'channel' is required for this request","Attribut 'channel' ist für diese Anforderung erforderlich"}.
|
||||
{"Attribute 'id' is mandatory for MIX messages","Attribut 'id' ist verpflichtend für MIX-Nachrichten"}.
|
||||
{"Attribute 'jid' is not allowed here","Attribut 'jid' ist hier nicht erlaubt"}.
|
||||
|
@ -97,29 +92,20 @@
|
|||
{"Conference room does not exist","Konferenzraum existiert nicht"}.
|
||||
{"Configuration of room ~s","Konfiguration des Raumes ~s"}.
|
||||
{"Configuration","Konfiguration"}.
|
||||
{"Connected Resources:","Verbundene Ressourcen:"}.
|
||||
{"Contact Addresses (normally, room owner or owners)","Kontaktadresse (normalerweise Raumbesitzer)"}.
|
||||
{"Country","Land"}.
|
||||
{"CPU Time:","CPU-Zeit:"}.
|
||||
{"Current Discussion Topic","Aktuelles Diskussionsthema"}.
|
||||
{"Database failure","Datenbankfehler"}.
|
||||
{"Database Tables at ~p","Datenbanktabellen bei ~p"}.
|
||||
{"Database Tables Configuration at ","Datenbanktabellen-Konfiguration bei "}.
|
||||
{"Database","Datenbank"}.
|
||||
{"December","Dezember"}.
|
||||
{"Default users as participants","Benutzer werden standardmäßig Teilnehmer"}.
|
||||
{"Delete content","Inhalt löschen"}.
|
||||
{"Delete message of the day on all hosts","Lösche Nachricht des Tages auf allen Hosts"}.
|
||||
{"Delete message of the day","Lösche Nachricht des Tages"}.
|
||||
{"Delete Selected","Markierte löschen"}.
|
||||
{"Delete table","Tabelle löschen"}.
|
||||
{"Delete User","Benutzer löschen"}.
|
||||
{"Deliver event notifications","Ereignisbenachrichtigungen zustellen"}.
|
||||
{"Deliver payloads with event notifications","Nutzdaten mit Ereignisbenachrichtigungen zustellen"}.
|
||||
{"Description:","Beschreibung:"}.
|
||||
{"Disc only copy","Nur auf Festplatte"}.
|
||||
{"'Displayed groups' not added (they do not exist!): ","'Angezeigte Gruppen' nicht hinzugefügt (sie existieren nicht!): "}.
|
||||
{"Displayed:","Angezeigt:"}.
|
||||
{"Don't tell your password to anybody, not even the administrators of the XMPP server.","Geben Sie niemandem Ihr Passwort, auch nicht den Administratoren des XMPP-Servers."}.
|
||||
{"Dump Backup to Text File at ","Gib Backup in Textdatei aus bei "}.
|
||||
{"Dump to Text File","Ausgabe in Textdatei"}.
|
||||
|
@ -135,7 +121,6 @@
|
|||
{"ejabberd vCard module","ejabberd vCard-Modul"}.
|
||||
{"ejabberd Web Admin","ejabberd Web-Admin"}.
|
||||
{"ejabberd","ejabberd"}.
|
||||
{"Elements","Elemente"}.
|
||||
{"Email Address","E-Mail-Adresse"}.
|
||||
{"Email","E-Mail"}.
|
||||
{"Enable hats","Funktion einschalten"}.
|
||||
|
@ -150,7 +135,6 @@
|
|||
{"Enter path to text file","Geben Sie den Pfad zur Textdatei ein"}.
|
||||
{"Enter the text you see","Geben Sie den Text ein den Sie sehen"}.
|
||||
{"Erlang XMPP Server","Erlang XMPP-Server"}.
|
||||
{"Error","Fehler"}.
|
||||
{"Exclude Jabber IDs from CAPTCHA challenge","Jabber-IDs von CAPTCHA-Herausforderung ausschließen"}.
|
||||
{"Export all tables as SQL queries to a file:","Alle Tabellen als SQL-Abfragen in eine Datei exportieren:"}.
|
||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Alle Benutzerdaten des Servers in PIEFXIS-Dateien (XEP-0227) exportieren:"}.
|
||||
|
@ -169,7 +153,6 @@
|
|||
{"Fill in the form to search for any matching XMPP User","Füllen Sie das Formular aus, um nach jeglichen passenden XMPP-Benutzern zu suchen"}.
|
||||
{"Friday","Freitag"}.
|
||||
{"From ~ts","Von ~ts"}.
|
||||
{"From","Von"}.
|
||||
{"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"}.
|
||||
|
@ -179,23 +162,19 @@
|
|||
{"Get Number of Registered Users","Anzahl der registrierten Benutzer abrufen"}.
|
||||
{"Get Pending","Ausstehende abrufen"}.
|
||||
{"Get User Last Login Time","letzte Anmeldezeit des Benutzers abrufen"}.
|
||||
{"Get User Password","Benutzerpasswort abrufen"}.
|
||||
{"Get User Statistics","Benutzerstatistiken abrufen"}.
|
||||
{"Given Name","Vorname"}.
|
||||
{"Grant voice to this person?","Dieser Person Sprachrechte erteilen?"}.
|
||||
{"Group","Gruppe"}.
|
||||
{"Groups that will be displayed to the members","Gruppen, die den Mitgliedern angezeigt werden"}.
|
||||
{"Groups","Gruppen"}.
|
||||
{"has been banned","wurde gebannt"}.
|
||||
{"has been kicked because of a system shutdown","wurde wegen einer Systemabschaltung hinausgeworfen"}.
|
||||
{"has been kicked because of an affiliation change","wurde wegen einer Änderung der Zugehörigkeit hinausgeworfen"}.
|
||||
{"has been kicked because the room has been changed to members-only","wurde hinausgeworfen weil der Raum zu Nur-Mitglieder geändert wurde"}.
|
||||
{"has been kicked","wurde hinausgeworfen"}.
|
||||
{"Hash of the vCard-temp avatar of this room","Hash des vCard-temp Avatars dieses Raums"}.
|
||||
{"Hat title","Funktionstitel"}.
|
||||
{"Hat URI","Funktions-URI"}.
|
||||
{"Hats limit exceeded","Funktionslimit wurde überschritten"}.
|
||||
{"Host unknown","Host unbekannt"}.
|
||||
{"Host","Host"}.
|
||||
{"HTTP File Upload","HTTP-Dateiupload"}.
|
||||
{"Idle connection","Inaktive Verbindung"}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","Wenn Sie das CAPTCHA-Bild nicht sehen, besuchen Sie die Webseite."}.
|
||||
|
@ -209,7 +188,6 @@
|
|||
{"Import Users From jabberd14 Spool Files","Importiere Benutzer aus jabberd14-Spooldateien"}.
|
||||
{"Improper domain part of 'from' attribute","Falscher Domänenteil des 'from'-Attributs"}.
|
||||
{"Improper message type","Unzulässiger Nachrichtentyp"}.
|
||||
{"Incoming s2s Connections:","Eingehende s2s-Verbindungen:"}.
|
||||
{"Incorrect CAPTCHA submit","Falsche CAPTCHA-Eingabe"}.
|
||||
{"Incorrect data form","Falsches Datenformular"}.
|
||||
{"Incorrect password","Falsches Passwort"}.
|
||||
|
@ -229,17 +207,16 @@
|
|||
{"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"}.
|
||||
{"Just created","Gerade erstellt"}.
|
||||
{"Label:","Label:"}.
|
||||
{"Last Activity","Letzte Aktivität"}.
|
||||
{"Last login","Letzte Anmeldung"}.
|
||||
{"Last message","Letzte Nachricht"}.
|
||||
|
@ -247,11 +224,10 @@
|
|||
{"Last year","Letztes Jahr"}.
|
||||
{"Least significant bits of SHA-256 hash of text should equal hexadecimal label","Niederwertigstes Bit des SHA-256-Hashes des Textes sollte hexadezimalem Label gleichen"}.
|
||||
{"leaves the room","verlässt den Raum"}.
|
||||
{"List of rooms","Liste von Räumen"}.
|
||||
{"List of users with hats","Liste der Benutzer mit Funktionen"}.
|
||||
{"List users with hats","Benutzer mit Funktionen auflisten"}.
|
||||
{"Logged Out","Abgemeldet"}.
|
||||
{"Logging","Protokollierung"}.
|
||||
{"Low level update script","Low-Level-Aktualisierungsscript"}.
|
||||
{"Make participants list public","Teilnehmerliste öffentlich machen"}.
|
||||
{"Make room CAPTCHA protected","Raum mittels CAPTCHA schützen"}.
|
||||
{"Make room members-only","Raum nur für Mitglieder zugänglich machen"}.
|
||||
|
@ -269,11 +245,8 @@
|
|||
{"Maximum number of items to persist","Maximale Anzahl persistenter Items"}.
|
||||
{"Maximum Number of Occupants","Maximale Anzahl der Teilnehmer"}.
|
||||
{"May","Mai"}.
|
||||
{"Members not added (inexistent vhost!): ","Mitglieder nicht hinzugefügt (nicht existierender vhost!): "}.
|
||||
{"Membership is required to enter this room","Mitgliedschaft ist erforderlich um diesen Raum zu betreten"}.
|
||||
{"Members:","Mitglieder:"}.
|
||||
{"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.","Merken Sie sich Ihr Passwort, oder schreiben Sie es auf einen Zettel den Sie sicher verwahren. Bei XMPP gibt es keine automatische Möglichkeit, das Passwort wiederherzustellen falls Sie es vergessen."}.
|
||||
{"Memory","Speicher"}.
|
||||
{"Mere Availability in XMPP (No Show Value)","Bloße Verfügbarkeit in XMPP (kein Anzeigewert)"}.
|
||||
{"Message body","Nachrichtentext"}.
|
||||
{"Message not found in forwarded payload","Nachricht nicht in weitergeleiteten Nutzdaten gefunden"}.
|
||||
|
@ -285,14 +258,11 @@
|
|||
{"Moderator privileges required","Moderatorrechte erforderlich"}.
|
||||
{"Moderator","Moderator"}.
|
||||
{"Moderators Only","nur Moderatoren"}.
|
||||
{"Modified modules","Geänderte Module"}.
|
||||
{"Module failed to handle the query","Modul konnte die Anfrage nicht verarbeiten"}.
|
||||
{"Monday","Montag"}.
|
||||
{"Multicast","Multicast"}.
|
||||
{"Multiple <item/> elements are not allowed by RFC6121","Mehrere <item/>-Elemente sind laut RFC6121 nicht erlaubt"}.
|
||||
{"Multi-User Chat","Mehrbenutzer-Chat (MUC)"}.
|
||||
{"Name in the rosters where this group will be displayed","Name in den Kontaktlisten wo diese Gruppe angezeigt werden wird"}.
|
||||
{"Name:","Name:"}.
|
||||
{"Name","Vorname"}.
|
||||
{"Natural Language for Room Discussions","Natürliche Sprache für Raumdiskussionen"}.
|
||||
{"Natural-Language Room Name","Raumname in natürlicher Sprache"}.
|
||||
|
@ -358,14 +328,10 @@
|
|||
{"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"}.
|
||||
{"Offline Messages:","Offline-Nachrichten:"}.
|
||||
{"OK","OK"}.
|
||||
{"Old Password:","Altes Passwort:"}.
|
||||
{"Online Users","Angemeldete Benutzer"}.
|
||||
{"Online Users:","Angemeldete Benutzer:"}.
|
||||
{"Online","Angemeldet"}.
|
||||
{"Only admins can see this","Nur Admins können dies sehen"}.
|
||||
{"Only collection node owners may associate leaf nodes with the collection","Nur Sammlungsknoten-Besitzer dürfen Blattknoten mit der Sammlung verknüpfen"}.
|
||||
{"Only deliver notifications to available users","Benachrichtigungen nur an verfügbare Benutzer schicken"}.
|
||||
{"Only <enable/> or <disable/> tags are allowed","Nur <enable/>- oder <disable/>-Tags sind erlaubt"}.
|
||||
|
@ -373,6 +339,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"}.
|
||||
|
@ -384,10 +351,8 @@
|
|||
{"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"}.
|
||||
|
@ -396,8 +361,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"}.
|
||||
{"Persistent","Persistent"}.
|
||||
|
@ -432,25 +395,21 @@
|
|||
{"Recipient is not in the conference room","Empfänger ist nicht im Konferenzraum"}.
|
||||
{"Register an XMPP account","Ein XMPP-Konto registrieren"}.
|
||||
{"Register","Anmelden"}.
|
||||
{"Registered Users","Registrierte Benutzer"}.
|
||||
{"Registered Users:","Registrierte Benutzer:"}.
|
||||
{"Remote copy","Fernkopie"}.
|
||||
{"Remove a hat from a user","Eine Funktion bei einem Benutzer entfernen"}.
|
||||
{"Remove All Offline Messages","Alle Offline-Nachrichten löschen"}.
|
||||
{"Remove User","Benutzer löschen"}.
|
||||
{"Remove","Entfernen"}.
|
||||
{"Replaced by new connection","Durch neue Verbindung ersetzt"}.
|
||||
{"Request has timed out","Zeitüberschreitung bei Anforderung"}.
|
||||
{"Request is ignored","Anforderung wird ignoriert"}.
|
||||
{"Requested role","Angeforderte Rolle"}.
|
||||
{"Resources","Ressourcen"}.
|
||||
{"Restart Service","Dienst neustarten"}.
|
||||
{"Restart","Neustart"}.
|
||||
{"Restore Backup from File at ","Backup wiederherstellen aus Datei bei "}.
|
||||
{"Restore binary backup after next ejabberd restart (requires less memory):","Stelle binäres Backup beim nächsten ejabberd-Neustart wieder her (benötigt weniger Speicher):"}.
|
||||
{"Restore binary backup immediately:","Stelle binäres Backup sofort wieder her:"}.
|
||||
{"Restore plain text backup immediately:","Stelle Klartext-Backup sofort wieder her:"}.
|
||||
{"Restore","Wiederherstellung"}.
|
||||
{"Result","Ergebnis"}.
|
||||
{"Roles and Affiliations that May Retrieve Member List","Rollen und Zugehörigkeiten die Mitgliederliste abrufen dürfen"}.
|
||||
{"Roles for which Presence is Broadcasted","Rollen für welche die Präsenz übertragen wird"}.
|
||||
{"Roles that May Send Private Messages","Rollen die Privatnachrichten senden dürfen"}.
|
||||
|
@ -461,20 +420,15 @@
|
|||
{"Room terminates","Raum wird beendet"}.
|
||||
{"Room title","Raumname"}.
|
||||
{"Roster groups allowed to subscribe","Kontaktlistengruppen die abonnieren dürfen"}.
|
||||
{"Roster of ~ts","Kontaktliste von ~ts"}.
|
||||
{"Roster size","Kontaktlistengröße"}.
|
||||
{"Roster:","Kontaktliste:"}.
|
||||
{"RPC Call Error","Fehler bei RPC-Aufruf"}.
|
||||
{"Running Nodes","Laufende Knoten"}.
|
||||
{"~s invites you to the room ~s","~s lädt Sie in den Raum ~s ein"}.
|
||||
{"Saturday","Samstag"}.
|
||||
{"Script check","Script-Überprüfung"}.
|
||||
{"Search from the date","Suche ab Datum"}.
|
||||
{"Search Results for ","Suchergebnisse für "}.
|
||||
{"Search the text","Text durchsuchen"}.
|
||||
{"Search until the date","Suche bis Datum"}.
|
||||
{"Search users in ","Suche Benutzer in "}.
|
||||
{"Select All","Alles auswählen"}.
|
||||
{"Send announcement to all online users on all hosts","Ankündigung an alle angemeldeten Benutzer auf allen Hosts senden"}.
|
||||
{"Send announcement to all online users","Ankündigung an alle angemeldeten Benutzer senden"}.
|
||||
{"Send announcement to all users on all hosts","Ankündigung an alle Benutzer auf allen Hosts senden"}.
|
||||
|
@ -495,24 +449,19 @@
|
|||
{"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"}.
|
||||
{"Statistics","Statistiken"}.
|
||||
{"Stop","Anhalten"}.
|
||||
{"Stopped Nodes","Angehaltene Knoten"}.
|
||||
{"Storage Type","Speichertyp"}.
|
||||
{"Store binary backup:","Speichere binäres Backup:"}.
|
||||
{"Store plain text backup:","Speichere Klartext-Backup:"}.
|
||||
{"Stream management is already enabled","Stream-Verwaltung ist bereits aktiviert"}.
|
||||
{"Stream management is not enabled","Stream-Verwaltung ist nicht aktiviert"}.
|
||||
{"Subject","Betreff"}.
|
||||
{"Submit","Senden"}.
|
||||
{"Submitted","Gesendet"}.
|
||||
{"Subscriber Address","Abonnenten-Adresse"}.
|
||||
{"Subscribers may publish","Abonnenten dürfen veröffentlichen"}.
|
||||
{"Subscription requests must be approved and only subscribers may retrieve items","Abonnement-Anforderungen müssen genehmigt werden und nur Abonnenten dürfen Items abrufen"}.
|
||||
{"Subscription","Abonnement"}.
|
||||
{"Subscriptions are not allowed","Abonnements sind nicht erlaubt"}.
|
||||
{"Sunday","Sonntag"}.
|
||||
{"Text associated with a picture","Text verbunden mit einem Bild"}.
|
||||
|
@ -562,7 +511,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: "}.
|
||||
|
@ -576,10 +524,8 @@
|
|||
{"Thursday","Donnerstag"}.
|
||||
{"Time delay","Zeitverzögerung"}.
|
||||
{"Timed out waiting for stream resumption","Zeitüberschreitung beim Warten auf Streamfortsetzung"}.
|
||||
{"Time","Zeit"}.
|
||||
{"To register, visit ~s","Um sich zu registrieren, besuchen Sie ~s"}.
|
||||
{"To ~ts","An ~ts"}.
|
||||
{"To","An"}.
|
||||
{"Token TTL","Token-TTL"}.
|
||||
{"Too many active bytestreams","Zu viele aktive Bytestreams"}.
|
||||
{"Too many CAPTCHA requests","Zu viele CAPTCHA-Anforderungen"}.
|
||||
|
@ -590,12 +536,8 @@
|
|||
{"Too many receiver fields were specified","Zu viele Empfängerfelder wurden angegeben"}.
|
||||
{"Too many unacked stanzas","Zu viele unbestätigte Stanzas"}.
|
||||
{"Too many users in this conference","Zu viele Benutzer in dieser Konferenz"}.
|
||||
{"Total rooms","Gesamte Räume"}.
|
||||
{"Traffic rate limit is exceeded","Datenratenlimit wurde überschritten"}.
|
||||
{"Transactions Aborted:","Abgebrochene Transaktionen:"}.
|
||||
{"Transactions Committed:","Übergebene Transaktionen:"}.
|
||||
{"Transactions Logged:","Protokollierte Transaktionen:"}.
|
||||
{"Transactions Restarted:","Neu gestartete Transaktionen:"}.
|
||||
{"~ts's MAM Archive","~ts's MAM Archiv"}.
|
||||
{"~ts's Offline Messages Queue","Offline-Nachrichten-Warteschlange von ~ts"}.
|
||||
{"Tuesday","Dienstag"}.
|
||||
{"Unable to generate a CAPTCHA","Konnte kein CAPTCHA erstellen"}.
|
||||
|
@ -606,19 +548,14 @@
|
|||
{"Uninstall","Deinstallieren"}.
|
||||
{"Unregister an XMPP account","Ein XMPP-Konto entfernen"}.
|
||||
{"Unregister","Deregistrieren"}.
|
||||
{"Unselect All","Alle abwählen"}.
|
||||
{"Unsupported <index/> element","Nicht unterstütztes <index/>-Element"}.
|
||||
{"Unsupported version","Nicht unterstützte Version"}.
|
||||
{"Update message of the day (don't send)","Aktualisiere Nachricht des Tages (nicht senden)"}.
|
||||
{"Update message of the day on all hosts (don't send)","Aktualisiere Nachricht des Tages auf allen Hosts (nicht senden)"}.
|
||||
{"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"}.
|
||||
{"Updating the vCard is not supported by the vCard storage backend","Aktualisierung der vCard wird vom vCard-Speicher-Backend nicht unterstützt"}.
|
||||
{"Upgrade","Upgrade"}.
|
||||
{"Uptime:","Betriebszeit:"}.
|
||||
{"URL for Archived Discussion Logs","URL für archivierte Diskussionsprotokolle"}.
|
||||
{"User already exists","Benutzer existiert bereits"}.
|
||||
{"User (jid)","Benutzer (JID)"}.
|
||||
|
@ -633,7 +570,6 @@
|
|||
{"Users are not allowed to register accounts so quickly","Benutzer dürfen Konten nicht so schnell registrieren"}.
|
||||
{"Users Last Activity","Letzte Benutzeraktivität"}.
|
||||
{"Users","Benutzer"}.
|
||||
{"Validate","Validieren"}.
|
||||
{"Value 'get' of 'type' attribute is not allowed","Wert 'get' des 'type'-Attributs ist nicht erlaubt"}.
|
||||
{"Value of '~s' should be boolean","Wert von '~s' sollte boolesch sein"}.
|
||||
{"Value of '~s' should be datetime string","Wert von '~s' sollte DateTime-Zeichenkette sein"}.
|
||||
|
@ -641,14 +577,13 @@
|
|||
{"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"}.
|
||||
{"Visitor","Besucher"}.
|
||||
{"Visitors are not allowed to change their nicknames in this room","Besucher dürfen in diesem Raum ihren Spitznamen nicht ändern"}.
|
||||
{"Visitors are not allowed to send messages to all occupants","Besucher dürfen nicht an alle Teilnehmer Nachrichten versenden"}.
|
||||
{"Voice requests are disabled in this conference","Sprachrecht-Anforderungen sind in diesem Raum deaktiviert"}.
|
||||
{"Voice request","Sprachrecht-Anforderung"}.
|
||||
{"Web client which allows to join the room anonymously","Web-Client, der es ermöglicht, dem Raum anonym beizutreten"}.
|
||||
{"Wednesday","Mittwoch"}.
|
||||
{"When a new subscription is processed and whenever a subscriber comes online","Sobald ein neues Abonnement verarbeitet wird und wann immer ein Abonnent sich anmeldet"}.
|
||||
{"When a new subscription is processed","Sobald ein neues Abonnement verarbeitet wird"}.
|
||||
|
@ -661,6 +596,7 @@
|
|||
{"Whether to allow subscriptions","Ob Abonnements erlaubt sind"}.
|
||||
{"Whether to make all subscriptions temporary, based on subscriber presence","Ob alle Abonnements temporär gemacht werden sollen, basierend auf der Abonnentenpräsenz"}.
|
||||
{"Whether to notify owners about new subscribers and unsubscribes","Ob Besitzer über neue Abonnenten und Abbestellungen benachrichtigt werden sollen"}.
|
||||
{"Who can send private messages","Wer kann private Nachrichten senden"}.
|
||||
{"Who may associate leaf nodes with a collection","Wer Blattknoten mit einer Sammlung verknüpfen darf"}.
|
||||
{"Wrong parameters in the web formulary","Falsche Parameter im Webformular"}.
|
||||
{"Wrong xmlns","Falscher xmlns"}.
|
||||
|
@ -672,6 +608,7 @@
|
|||
{"XMPP Show Value of XA (Extended Away)","XMPP-Anzeigewert von XA (Extended Away/für längere Zeit abwesend)"}.
|
||||
{"XMPP URI of Associated Publish-Subscribe Node","XMPP-URI des verknüpften Publish-Subscribe-Knotens"}.
|
||||
{"You are being removed from the room because of a system shutdown","Sie werden wegen einer Systemabschaltung aus dem Raum entfernt"}.
|
||||
{"You are not allowed to send private messages","Sie dürfen keine privaten Nachrichten senden"}.
|
||||
{"You are not joined to the channel","Sie sind dem Raum nicht beigetreten"}.
|
||||
{"You can later change your password using an XMPP client.","Sie können Ihr Passwort später mit einem XMPP-Client ändern."}.
|
||||
{"You have been banned from this room","Sie wurden aus diesem Raum verbannt"}.
|
||||
|
|
125
priv/msgs/el.msg
125
priv/msgs/el.msg
|
@ -12,16 +12,10 @@
|
|||
{"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","Καθορίστε το μοντέλο πρόσβασης"}.
|
||||
{"Access model","Μοντέλο πρόσβασης"}.
|
||||
{"Account doesn't exist","Ο λογαριασμός δεν υπάρχει"}.
|
||||
{"Action on user","Eνέργεια για το χρήστη"}.
|
||||
{"Add Jabber ID","Προσθήκη Jabber Ταυτότητας"}.
|
||||
{"Add New","Προσθήκη νέου"}.
|
||||
{"Add a hat to a user","Προσθέστε ένα καπέλο σε έναν χρήστη"}.
|
||||
{"Add User","Προσθήκη Χρήστη"}.
|
||||
{"Administration of ","Διαχείριση του "}.
|
||||
{"Administration","Διαχείριση"}.
|
||||
|
@ -52,7 +46,9 @@
|
|||
{"Anyone with a presence subscription of both or from may subscribe and retrieve items","Όποιος έχει συνδρομή παρουσίας και των δύο ή από μπορεί να εγγραφεί και να ανακτήσει στοιχεία"}.
|
||||
{"Anyone with Voice","Οποιοσδήποτε με Φωνή"}.
|
||||
{"Anyone","Οποιοσδήποτε"}.
|
||||
{"API Commands","Εντολές του API"}.
|
||||
{"April","Απρίλιος"}.
|
||||
{"Arguments","Επιχειρήματα"}.
|
||||
{"Attribute 'channel' is required for this request","Το δηλωτικό 'channel' απαιτείται για αυτό το Ερώτημα"}.
|
||||
{"Attribute 'id' is mandatory for MIX messages","Το δηλωτικό 'id' επιτακτικό για μηνύματα MIX"}.
|
||||
{"Attribute 'jid' is not allowed here","Το δηλωτικό 'jid' δεν επιτρέπεται εδώ"}.
|
||||
|
@ -78,6 +74,7 @@
|
|||
{"Changing role/affiliation is not allowed","Η αλλαγή ρόλου/ομάδας δεν επιτρέπεται"}.
|
||||
{"Channel already exists","Το κανάλι υπάρχει ήδη"}.
|
||||
{"Channel does not exist","Το κανάλι δεν υπάρχει"}.
|
||||
{"Channel JID","JID καναλιού"}.
|
||||
{"Channels","Κανάλια"}.
|
||||
{"Characters not allowed:","Χαρακτήρες που δεν επιτρέπονται:"}.
|
||||
{"Chatroom configuration modified","Η ρύθμιση παραμέτρων της αίθουσας σύνεδριασης τροποποιηθηκε"}.
|
||||
|
@ -91,33 +88,25 @@
|
|||
{"Choose whether to approve this entity's subscription.","Επιλέξτε αν θα εγκρίθεί η εγγραφή αυτής της οντότητας."}.
|
||||
{"City","Πόλη"}.
|
||||
{"Client acknowledged more stanzas than sent by server","Ο πελάτης γνωρίζει περισσότερα δωμάτια από αυτά που στάλθηκαν από τον εξυπηρετητή"}.
|
||||
{"Clustering","Συσταδοποίηση"}.
|
||||
{"Commands","Εντολές"}.
|
||||
{"Conference room does not exist","Η αίθουσα σύνεδριασης δεν υπάρχει"}.
|
||||
{"Configuration of room ~s","Διαμόρφωση δωματίου ~ s"}.
|
||||
{"Configuration","Ρύθμιση παραμέτρων"}.
|
||||
{"Connected Resources:","Συνδεδεμένοι Πόροι:"}.
|
||||
{"Contact Addresses (normally, room owner or owners)","Διευθύνσεις της Επαφής (κανονικά, ιδιοκτήτης (-ες) αίθουσας)"}.
|
||||
{"Country","Χώρα"}.
|
||||
{"CPU Time:","Ώρα CPU:"}.
|
||||
{"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","Αποθήκευση σε αρχείο κειμένου"}.
|
||||
|
@ -133,9 +122,9 @@
|
|||
{"ejabberd vCard module","ejabberd vCard module"}.
|
||||
{"ejabberd Web Admin","ejabberd Web Admin"}.
|
||||
{"ejabberd","ejabberd"}.
|
||||
{"Elements","Στοιχεία"}.
|
||||
{"Email Address","Ηλεκτρονική Διεύθυνση"}.
|
||||
{"Email","Ηλεκτρονικό ταχυδρομείο"}.
|
||||
{"Enable hats","Ενεργοποίηση καπέλων"}.
|
||||
{"Enable logging","Ενεργοποίηση καταγραφής"}.
|
||||
{"Enable message archiving","Ενεργοποιήστε την αρχειοθέτηση μηνυμάτων"}.
|
||||
{"Enabling push without 'node' attribute is not supported","Η ενεργοποίηση της ώθησης χωρίς το χαρακτηριστικό 'κόμβος' δεν υποστηρίζεται"}.
|
||||
|
@ -147,7 +136,6 @@
|
|||
{"Enter path to text file","Εισάγετε Τοποθεσία Αρχείου Κειμένου"}.
|
||||
{"Enter the text you see","Πληκτρολογήστε το κείμενο που βλέπετε"}.
|
||||
{"Erlang XMPP Server","Διακομιστής Erlang XMPP"}.
|
||||
{"Error","Σφάλμα"}.
|
||||
{"Exclude Jabber IDs from CAPTCHA challenge","Εξαίρεσε αυτές τις ταυτότητες Jabber από την CAPTCHA πρόκληση"}.
|
||||
{"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):"}.
|
||||
|
@ -166,28 +154,28 @@
|
|||
{"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","Λίστα online χρηστών"}.
|
||||
{"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","Ομάδα"}.
|
||||
{"has been banned","έχει αποβληθεί διαπαντώς"}.
|
||||
{"has been kicked because of a system shutdown","αποβλήθηκε λόγω τερματισμού συστήματος"}.
|
||||
{"has been kicked because of an affiliation change","έχει αποβληθεί λόγω αλλαγής υπαγωγής"}.
|
||||
{"has been kicked because the room has been changed to members-only","αποβλήθηκε επειδή η αίθουσα αλλάξε γιά μέλη μόνο"}.
|
||||
{"has been kicked","αποβλήθηκε"}.
|
||||
{"Hash of the vCard-temp avatar of this room","Hash του vCard-temp avatar αυτού του δωματίου"}.
|
||||
{"Hat title","Τίτλος καπέλου"}.
|
||||
{"Hat URI","Καπέλο URI"}.
|
||||
{"Hats limit exceeded","Υπέρβαση του ορίου καπέλων"}.
|
||||
{"Host unknown","Άγνωστος εξυπηρετητής"}.
|
||||
{"Host","Εξυπηρετητής"}.
|
||||
{"HTTP File Upload","Ανέβασμα αρχείου"}.
|
||||
{"Idle connection","Αδρανής σύνδεση"}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","Εάν δεν βλέπετε την εικόνα CAPTCHA εδώ, επισκεφθείτε την ιστοσελίδα."}.
|
||||
|
@ -201,13 +189,14 @@
|
|||
{"Import Users From jabberd14 Spool Files","Εισαγωγή Χρηστών από αρχεία σειράς jabberd14"}.
|
||||
{"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","Μη έγκυρο χαρακτηριστικό 'από' στο προωθούμενο μήνυμα"}.
|
||||
|
@ -219,16 +208,16 @@
|
|||
{"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, λόγω της τακτικής Παροχής Υπηρεσιών"}.
|
||||
{"JID normalization failed","Απετράπη η κανονικοποίηση του JID"}.
|
||||
{"Joined MIX channels of ~ts","Ενσωματωμένα κανάλια MIX του ~ts"}.
|
||||
{"Joined MIX channels:","Ενσωματωμένα κανάλια MIX:"}.
|
||||
{"joins the room","συνδέεται στην αίθουσα"}.
|
||||
{"July","Ιούλιος"}.
|
||||
{"June","Ιούνιος"}.
|
||||
{"Just created","Μόλις δημιουργήθηκε"}.
|
||||
{"Label:","Ετικέτα:"}.
|
||||
{"Last Activity","Τελευταία Δραστηριότητα"}.
|
||||
{"Last login","Τελευταία σύνδεση"}.
|
||||
{"Last message","Τελευταίο μήνυμα"}.
|
||||
|
@ -236,9 +225,10 @@
|
|||
{"Last year","Πέρυσι"}.
|
||||
{"Least significant bits of SHA-256 hash of text should equal hexadecimal label","Τα ψηφία μικρότερης αξίας του αθροίσματος SHA-256 του κειμένου θα έπρεπε να ισούνται με την δεκαεξαδική ετικέτα"}.
|
||||
{"leaves the room","εγκαταλείπει την αίθουσα"}.
|
||||
{"List of rooms","Κατάλογος αιθουσών"}.
|
||||
{"List of users with hats","Λίστα των χρηστών με καπέλα"}.
|
||||
{"List users with hats","Λίστα χρηστών με καπέλα"}.
|
||||
{"Logged Out","Αποσυνδεδεμένος"}.
|
||||
{"Logging","Καταγραφή"}.
|
||||
{"Low level update script","Προγράμα ενημέρωσης χαμηλού επίπεδου"}.
|
||||
{"Make participants list public","Κάντε δημόσιο τον κατάλογο συμμετεχόντων"}.
|
||||
{"Make room CAPTCHA protected","Κάντε την αίθουσα προστατεύομενη με CAPTCHA"}.
|
||||
{"Make room members-only","Κάντε την αίθουσα μόνο για μέλη"}.
|
||||
|
@ -249,17 +239,15 @@
|
|||
{"Malformed username","Λανθασμένη μορφή ονόματος χρήστη"}.
|
||||
{"MAM preference modification denied by service policy","Άρνηση αλλαγής προτιμήσεων MAM, λόγω της τακτικής Παροχής Υπηρεσιών"}.
|
||||
{"March","Μάρτιος"}.
|
||||
{"Max # of items to persist, or `max` for no specific limit other than a server imposed maximum","Μέγιστος αριθμός στοιχείων που πρέπει να παραμείνουν, ή « Μέγιστο » για κανένα συγκεκριμένο όριο εκτός από το μέγιστο που επιβάλλει ο διακομιστής"}.
|
||||
{"Max payload size in bytes","Μέγιστο μέγεθος φορτίου σε 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","Δεν βρέθηκε μήνυμα στον προωθημένο φόρτο εργασίας"}.
|
||||
|
@ -271,15 +259,12 @@
|
|||
{"Moderator privileges required","Aπαιτούνται προνόμια επόπτου"}.
|
||||
{"Moderators Only","Επόπτες μόμον"}.
|
||||
{"Moderator","Επόπτης"}.
|
||||
{"Modified modules","Τροποποιημένα modules"}.
|
||||
{"Module failed to handle the query","Το module απέτυχε να χειριστεί το ερώτημα"}.
|
||||
{"Monday","Δευτέρα"}.
|
||||
{"Multicast","Πολλαπλή διανομή (Multicast)"}.
|
||||
{"Multiple <item/> elements are not allowed by RFC6121","Πολλαπλά στοιχεία <item/> δεν επιτρέπονται από το RFC6121"}.
|
||||
{"Multi-User Chat","Συνομιλία με πολλούς χρήστες"}.
|
||||
{"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'"}.
|
||||
|
@ -325,6 +310,7 @@
|
|||
{"Node ~p","Κόμβος ~p"}.
|
||||
{"Nodeprep has failed","Το Nodeprep απέτυχε"}.
|
||||
{"Nodes","Κόμβοι"}.
|
||||
{"Node","Κόμβος"}.
|
||||
{"None","Κανένα"}.
|
||||
{"Not allowed","Δεν επιτρέπεται"}.
|
||||
{"Not Found","Δε βρέθηκε"}.
|
||||
|
@ -338,17 +324,15 @@
|
|||
{"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 Χρήστες:"}.
|
||||
{"Online Users","Συνδεμένοι χρήστες"}.
|
||||
{"Online","Συνδεδεμένο"}.
|
||||
{"Only admins can see this","Μόνον οι διαχειριστές μπορούν να το δουν αυτό"}.
|
||||
{"Only collection node owners may associate leaf nodes with the collection","Μόνον οι ιδιοκτήτες των κόμβων μπορούν να συσχετίσουν leaf nodes με την Συλλογή"}.
|
||||
{"Only deliver notifications to available users","Παράδοση ειδοποιήσεων μόνο σε διαθέσιμους χρήστες"}.
|
||||
{"Only <enable/> or <disable/> tags are allowed","Επιτρέπονται μόνο tags <enable /> ή <disable />"}.
|
||||
|
@ -356,6 +340,7 @@
|
|||
{"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","Μόνο οι συμμετέχοντες επιτρέπεται να στείλουν ερωτήματα στη διάσκεψη"}.
|
||||
|
@ -365,11 +350,11 @@
|
|||
{"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","Aπαιτούνται προνόμια ιδιοκτήτη"}.
|
||||
{"Packet relay is denied by service policy","Απαγορεύεται η αναμετάδοση πακέτων, λόγω της τακτικής Παροχής Υπηρεσιών"}.
|
||||
{"Packet","Πακέτο"}.
|
||||
{"Participant ID","ID συμμετέχοντος"}.
|
||||
{"Participant","Συμμετέχων"}.
|
||||
{"Password Verification","Επαλήθευση κωδικού πρόσβασης"}.
|
||||
{"Password Verification:","Επαλήθευση κωδικού πρόσβασης:"}.
|
||||
|
@ -377,8 +362,7 @@
|
|||
{"Password:","Κωδικός πρόσβασης:"}.
|
||||
{"Path to Dir","Τοποθεσία κατάλογου αρχείων"}.
|
||||
{"Path to File","Τοποθεσία Αρχείου"}.
|
||||
{"Payload type","Τύπος φόρτου εργασιών"}.
|
||||
{"Pending","Εκκρεμεί"}.
|
||||
{"Payload semantic type information","Πληροφορίες σημασιολογικού τύπου ωφέλιμου φορτίου"}.
|
||||
{"Period: ","Περίοδος: "}.
|
||||
{"Persist items to storage","Μόνιμη αποθήκευση στοιχείων"}.
|
||||
{"Persistent","Μόνιμη"}.
|
||||
|
@ -412,25 +396,22 @@
|
|||
{"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 All Offline Messages","Αφαίρεση όλων των μηνυμάτων χωρίς σύνδεση"}.
|
||||
{"Remove a hat from a user","Αφαίρεση ενός καπέλου από έναν χρήστη"}.
|
||||
{"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","Επαναφορά Αντιγράφου Ασφαλείας"}.
|
||||
{"Result","Αποτέλεσμα"}.
|
||||
{"Roles and Affiliations that May Retrieve Member List","Ρόλοι και δεσμοί που μπορούν να λάβουν την λίστα μελών"}.
|
||||
{"Roles for which Presence is Broadcasted","Ρόλοι των οποίων η παρουσία δηλώνεται δημόσια"}.
|
||||
{"Roles that May Send Private Messages","Ρόλοι που επιτρέπεται να αποστέλλουν ιδιωτικά μηνύματα"}.
|
||||
|
@ -441,20 +422,15 @@
|
|||
{"Room terminates","Τερματισμός Αίθουσας"}.
|
||||
{"Room title","Τίτλος Αίθουσας"}.
|
||||
{"Roster groups allowed to subscribe","Ομάδες Καταλόγου Επαφών μπορούν να εγγραφούν"}.
|
||||
{"Roster of ~ts","Καταλόγου Επαφών του ~ts"}.
|
||||
{"Roster size","Μέγεθος Καταλόγου Επαφών"}.
|
||||
{"Roster:","Καταλόγος Επαφών:"}.
|
||||
{"RPC Call Error","Σφάλμα RPC Κλήσης"}.
|
||||
{"Running Nodes","Ενεργοί Κόμβοι"}.
|
||||
{"~s invites you to the room ~s","~s Σας καλεί στο δωμάτιο ~s"}.
|
||||
{"Saturday","Σάββατο"}.
|
||||
{"Script check","Script ελέγχου"}.
|
||||
{"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","Αποστολή ανακοίνωσης σε όλους τους χρήστες σε όλους τους κεντρικούς υπολογιστές"}.
|
||||
|
@ -467,32 +443,29 @@
|
|||
{"Set message of the day on all hosts and send to online users","Ορίστε μήνυμα ημέρας και άμεση αποστολή στους συνδεδεμένους χρήστες σε όλους τους κεντρικούς υπολογιστές"}.
|
||||
{"Shared Roster Groups","Κοινές Ομάδες Καταλόγων Επαφών"}.
|
||||
{"Show Integral Table","Δείτε Ολοκληρωτικό Πίνακα"}.
|
||||
{"Show Occupants Join/Leave","Εμφάνιση ενοίκων Join/Leave"}.
|
||||
{"Show Ordinary Table","Δείτε Κοινό Πίνακα"}.
|
||||
{"Shut Down Service","Τερματισμός Υπηρεσίας"}.
|
||||
{"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.","Ορισμένοι πελάτες XMPP μπορούν να αποθηκεύσουν τον κωδικό πρόσβασής σας στον υπολογιστή, αλλά θα πρέπει να το κάνετε μόνο στον προσωπικό σας υπολογιστή για λόγους ασφαλείας."}.
|
||||
{"Sources Specs:","Πηγές Προδιαγραφές:"}.
|
||||
{"Specify the access model","Καθορίστε το μοντέλο πρόσβασης"}.
|
||||
{"Specify the event message type","Καθορίστε τον τύπο μηνύματος συμβάντος"}.
|
||||
{"Specify the publisher model","Καθορίστε το μοντέλο εκδότη"}.
|
||||
{"Stanza id is not valid","Το Stanza id δεν είναι έγκυρο"}.
|
||||
{"Stanza ID","Ταυτότητα Δωματίου"}.
|
||||
{"Statically specify a replyto of the node owner(s)","Προσδιορίστε (στατικά) το Απάντηση Προς του ιδιοκτήτη-ων του κόμβου"}.
|
||||
{"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","Το κείμενο σχετίστηκε με έναν ήχο"}.
|
||||
|
@ -516,7 +489,10 @@
|
|||
{"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","Ο κατάλογος όλων των online χρηστών"}.
|
||||
{"The list of all users","Ο κατάλογος όλων των χρηστών"}.
|
||||
{"The list of JIDs that may associate leaf nodes with a collection","Λίστα των JIDs που μπορούν να σχετίζουν leaf κόμβους με μια Συλλογή"}.
|
||||
{"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","Ο κόμβος είναι κόμβος Συλλογής"}.
|
||||
|
@ -535,10 +511,10 @@
|
|||
{"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","Η 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: ","Παρουσιάστηκε σφάλμα κατά την αλλαγή του κωδικού πρόσβασης: "}.
|
||||
|
@ -552,7 +528,6 @@
|
|||
{"Thursday","Πέμπτη"}.
|
||||
{"Time delay","Χρόνος καθυστέρησης"}.
|
||||
{"Timed out waiting for stream resumption","Υπερέβην το όριο αναμονής για επανασύνδεση της Ροής"}.
|
||||
{"Time","Χρόνος"}.
|
||||
{"To register, visit ~s","Για να εγγραφείτε, επισκεφθείτε το ~s"}.
|
||||
{"To ~ts","Προς ~ts"}.
|
||||
{"Token TTL","Διακριτικό TTL"}.
|
||||
|
@ -565,13 +540,8 @@
|
|||
{"Too many receiver fields were specified","Πάρα πολλά πεδία δεκτών προσδιορίστηκαν"}.
|
||||
{"Too many unacked stanzas","Πάρα πολλές μη αναγνωρισμένες stanzas"}.
|
||||
{"Too many users in this conference","Πάρα πολλοί χρήστες σε αυτή τη διάσκεψη"}.
|
||||
{"Total rooms","Συνολικές Αίθουσες σύνεδριασης"}.
|
||||
{"To","Προς"}.
|
||||
{"Traffic rate limit is exceeded","Υπέρφορτωση"}.
|
||||
{"Transactions Aborted:","Αποτυχημένες συναλλαγές:"}.
|
||||
{"Transactions Committed:","Παραδοθείσες συναλλαγές:"}.
|
||||
{"Transactions Logged:","Καταγεγραμμένες συναλλαγές:"}.
|
||||
{"Transactions Restarted:","Επανειλημμένες συναλλαγές:"}.
|
||||
{"~ts's MAM Archive","Αρχείο MAM του ~ts"}.
|
||||
{"~ts's Offline Messages Queue","~ts's Χωρίς Σύνδεση Μηνύματα"}.
|
||||
{"Tuesday","Τρίτη"}.
|
||||
{"Unable to generate a CAPTCHA","Αδύνατη η δημιουργία CAPTCHA"}.
|
||||
|
@ -579,23 +549,23 @@
|
|||
{"Unauthorized","Χωρίς Εξουσιοδότηση"}.
|
||||
{"Unexpected action","Απροσδόκητη ενέργεια"}.
|
||||
{"Unexpected error condition: ~p","Απροσδόκητες συνθήκες σφάλματος: ~p"}.
|
||||
{"Uninstall","Απεγκατάσταση"}.
|
||||
{"Unregister an XMPP account","Καταργήση λογαριασμού XMPP"}.
|
||||
{"Unregister","Καταργήση εγγραφής"}.
|
||||
{"Unselect All","Αποεπιλογή όλων"}.
|
||||
{"Unsupported <index/> element","Μη υποστηριζόμενο στοιχείο <index />"}.
|
||||
{"Unsupported version","Μη υποστηριζόμενη έκδοση"}.
|
||||
{"Update message of the day (don't send)","Ενημέρωση μηνύματος ημέρας (χωρίς άμεση αποστολή)"}.
|
||||
{"Update message of the day on all hosts (don't send)","Ενημέρωση μηνύματος ημέρας σε όλους τους κεντρικούς υπολογιστές (χωρίς άμεση αποστολή)"}.
|
||||
{"Update plan","Σχέδιο ενημέρωσης"}.
|
||||
{"Update ~p","Ενημέρωση ~p"}.
|
||||
{"Update script","Προγράμα ενημέρωσης"}.
|
||||
{"Update","Ενημέρωση"}.
|
||||
{"Uptime:","Χρόνος σε λειτουργία:"}.
|
||||
{"Update specs to get modules source, then install desired ones.","Ενημερώστε τις προδιαγραφές για να λάβετε την πηγή των ενοτήτων και, στη συνέχεια, εγκαταστήστε τις επιθυμητές."}.
|
||||
{"Update Specs","Προδιαγραφές ενημέρωσης"}.
|
||||
{"Updating the vCard is not supported by the vCard storage backend","Η ενημέρωση της vCard δεν υποστηρίζεται από το backend αποθήκευσης vCard"}.
|
||||
{"Upgrade","Αναβάθμιση"}.
|
||||
{"URL for Archived Discussion Logs","URL αρχειοθετημένων καταγραφών συζητήσεων"}.
|
||||
{"User already exists","Ο χρήστης υπάρχει ήδη"}.
|
||||
{"User JID","JID Χρήστη"}.
|
||||
{"User (jid)","Χρήστης (jid)"}.
|
||||
{"User Management","Διαχείριση χρηστών"}.
|
||||
{"User not allowed to perform an IQ set on another user's vCard.","Ο χρήστης δεν επιτρέπεται να εκτελέσει ένα σετ IQ στην vCard ενός άλλου χρήστη."}.
|
||||
{"User removed","Ο Χρήστης αφαιρέθηκε"}.
|
||||
{"User session not found","Η περίοδος σύνδεσης χρήστη δεν βρέθηκε"}.
|
||||
{"User session terminated","Η περίοδος σύνδεσης χρήστη τερματίστηκε"}.
|
||||
|
@ -605,21 +575,20 @@
|
|||
{"Users Last Activity","Τελευταία Δραστηριότητα Χρήστη"}.
|
||||
{"Users","Χρήστες"}.
|
||||
{"User","Χρήστης"}.
|
||||
{"Validate","Επαληθεύστε"}.
|
||||
{"Value 'get' of 'type' attribute is not allowed","Η τιμή 'get' του 'type' δεν επιτρέπεται"}.
|
||||
{"Value of '~s' should be boolean","Η τιμή του '~s' πρέπει να είναι boolean"}.
|
||||
{"Value of '~s' should be datetime string","Η τιμή του '~s' θα πρέπει να είναι χρονοσειρά"}.
|
||||
{"Value of '~s' should be integer","Η τιμή του '~s' θα πρέπει να είναι ακέραιος"}.
|
||||
{"Value 'set' of 'type' attribute is not allowed","Δεν επιτρέπεται η παράμετρος 'set' του 'type'"}.
|
||||
{"vCard User Search","vCard Αναζήτηση χρηστών"}.
|
||||
{"View Queue","Εμφάνιση λίστας αναμονής"}.
|
||||
{"View Roster","Εμφάνιση λίστας Επαφών"}.
|
||||
{"View joined MIX channels","Προβολή ενταγμένων καναλιών MIX"}.
|
||||
{"Virtual Hosts","Eικονικοί κεντρικοί υπολογιστές"}.
|
||||
{"Visitors are not allowed to change their nicknames in this room","Οι επισκέπτες δεν επιτρέπεται να αλλάξουν τα ψευδώνυμα τους σε αυτή την αίθουσα"}.
|
||||
{"Visitors are not allowed to send messages to all occupants","Οι επισκέπτες δεν επιτρέπεται να στείλουν μηνύματα σε όλους τους συμμετέχοντες"}.
|
||||
{"Visitor","Επισκέπτης"}.
|
||||
{"Voice requests are disabled in this conference","Τα αιτήματα φωνής είναι απενεργοποιημένα, σε αυτό το συνέδριο"}.
|
||||
{"Voice request","Αίτημα φωνής"}.
|
||||
{"Web client which allows to join the room anonymously","Web client που επιτρέπει την ανώνυμη είσοδο στην αίθουσα"}.
|
||||
{"Wednesday","Τετάρτη"}.
|
||||
{"When a new subscription is processed and whenever a subscriber comes online","Όταν μία νέα συνδρομή βρίσκεται εν επεξεργασία και όποτε ένας συνδρομητής συνδεθεί"}.
|
||||
{"When a new subscription is processed","Όταν μία νέα συνδρομή βρίσκεται εν επεξεργασία"}.
|
||||
|
@ -632,6 +601,7 @@
|
|||
{"Whether to allow subscriptions","Εάν επιτρέπονται συνδρομές"}.
|
||||
{"Whether to make all subscriptions temporary, based on subscriber presence","Αν επιτρέπεται να γίνουν όλες οι συνδρομές προσωρινές, βασιζόμενοι στην παρουσία του συνδρομητή"}.
|
||||
{"Whether to notify owners about new subscribers and unsubscribes","Αν πρέπει να ειδοποιούνται οι ιδιοκτήτες για νέους συνδρομητές και αποχωρήσεις"}.
|
||||
{"Who can send private messages","Ποιος μπορεί να στείλει ιδιωτικά μηνύματα"}.
|
||||
{"Who may associate leaf nodes with a collection","Ποιός μπορεί να συσχετίζει leaf nodes με μία συλλογή"}.
|
||||
{"Wrong parameters in the web formulary","Εσφαλμένες παράμετροι στην διαμόρφωση τυπικότητας του δυκτίου"}.
|
||||
{"Wrong xmlns","Εσφαλμένο xmlns"}.
|
||||
|
@ -643,6 +613,7 @@
|
|||
{"XMPP Show Value of XA (Extended Away)","Δείξε τιμή XMPP Αξία του Λίαν Απομακρυσμένος"}.
|
||||
{"XMPP URI of Associated Publish-Subscribe Node","XMPP URI του συσχετισμένου κόμβου Δημοσίευσης-Εγγραφής"}.
|
||||
{"You are being removed from the room because of a system shutdown","Απαιτείται η απομάκρυνσή σας από την αίθουσα, λόγω τερματισμού συστήματος"}.
|
||||
{"You are not allowed to send private messages","Δεν επιτρέπεται η αποστολή ιδιωτικών μηνυμάτων"}.
|
||||
{"You are not joined to the channel","Δεν λαμβάνετε μέρος στο κανάλι"}.
|
||||
{"You can later change your password using an XMPP client.","Μπορείτε αργότερα να αλλάξετε τον κωδικό πρόσβασής σας χρησιμοποιώντας ένα πρόγραμμα-πελάτη XMPP."}.
|
||||
{"You have been banned from this room","Σας έχει απαγορευθεί η είσοδος σε αυτή την αίθουσα"}.
|
||||
|
|
|
@ -12,14 +12,9 @@
|
|||
{"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"}.
|
||||
{"Add Jabber ID","Aldonu Jabber ID"}.
|
||||
{"Add New","Aldonu novan"}.
|
||||
{"Add User","Aldonu Uzanton"}.
|
||||
{"Administration of ","Mastrumado de "}.
|
||||
{"Administration","Administro"}.
|
||||
|
@ -79,22 +74,17 @@
|
|||
{"Conference room does not exist","Babilejo ne ekzistas"}.
|
||||
{"Configuration of room ~s","Agordo de babilejo ~s"}.
|
||||
{"Configuration","Agordo"}.
|
||||
{"Connected Resources:","Konektataj risurcoj:"}.
|
||||
{"Country","Lando"}.
|
||||
{"CPU Time:","CPU-tempo"}.
|
||||
{"Current Discussion Topic","Aktuala Diskuta Temo"}.
|
||||
{"Database Tables at ~p","Datumbaz-tabeloj je ~p"}.
|
||||
{"Database Tables Configuration at ","Agordo de datumbaz-tabeloj je "}.
|
||||
{"Database","Datumbazo"}.
|
||||
{"December","Decembro"}.
|
||||
{"Default users as participants","Kutime farigu uzantojn kiel partpoprenantoj"}.
|
||||
{"Delete message of the day on all hosts","Forigu mesaĝo de la tago je ĉiu gastigo"}.
|
||||
{"Delete message of the day","Forigu mesaĝo de la tago"}.
|
||||
{"Delete Selected","Forigu elektata(j)n"}.
|
||||
{"Delete User","Forigu Uzanton"}.
|
||||
{"Deliver event notifications","Liveru event-sciigojn"}.
|
||||
{"Deliver payloads with event notifications","Liveru aĵojn de event-sciigoj"}.
|
||||
{"Description:","Priskribo:"}.
|
||||
{"Disc only copy","Nur disk-kopio"}.
|
||||
{"Dump Backup to Text File at ","Skribu sekurkopion en plata teksto al "}.
|
||||
{"Dump to Text File","Skribu en plata tekst-dosiero"}.
|
||||
|
@ -108,7 +98,6 @@
|
|||
{"ejabberd vCard module","ejabberd vCard-modulo"}.
|
||||
{"ejabberd Web Admin","ejabberd Teksaĵa Administro"}.
|
||||
{"ejabberd","ejabberd"}.
|
||||
{"Elements","Eroj"}.
|
||||
{"Email Address","Retpoŝta Adreso"}.
|
||||
{"Email","Retpoŝto"}.
|
||||
{"Enable logging","Ŝaltu protokoladon"}.
|
||||
|
@ -120,7 +109,6 @@
|
|||
{"Enter path to jabberd14 spool file","Enmetu vojon al jabberd14-uzantdosiero"}.
|
||||
{"Enter path to text file","Enmetu vojon al plata teksto"}.
|
||||
{"Enter the text you see","Enmetu montrita teksto"}.
|
||||
{"Error","Eraro"}.
|
||||
{"Exclude Jabber IDs from CAPTCHA challenge","Esceptu Ĵabber-identigilojn je CAPTCHA-defio"}.
|
||||
{"Export all tables as SQL queries to a file:","Eksportu ĉiuj tabeloj kiel SQL-informmendo al dosierujo:"}.
|
||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Eksportu datumojn de ĉiuj uzantoj en servilo al PIEFXIS dosieroj (XEP-0227):"}.
|
||||
|
@ -130,23 +118,18 @@
|
|||
{"February","Februaro"}.
|
||||
{"File larger than ~w bytes","Dosiero pli granda ol ~w bajtoj"}.
|
||||
{"Friday","Vendredo"}.
|
||||
{"From","De"}.
|
||||
{"Full Name","Plena Nomo"}.
|
||||
{"Get Number of Online Users","Montru nombron de konektataj uzantoj"}.
|
||||
{"Get Number of Registered Users","Montru nombron de registritaj uzantoj"}.
|
||||
{"Get User Last Login Time","Montru tempon de lasta ensaluto"}.
|
||||
{"Get User Password","Montru pasvorton de uzanto"}.
|
||||
{"Get User Statistics","Montru statistikojn de uzanto"}.
|
||||
{"Given Name","Persona Nomo"}.
|
||||
{"Grant voice to this person?","Koncedu voĉon al ĉi-persono?"}.
|
||||
{"Group","Grupo"}.
|
||||
{"Groups","Grupoj"}.
|
||||
{"has been banned","estas forbarita"}.
|
||||
{"has been kicked because of a system shutdown","estas forpelita pro sistem-haltigo"}.
|
||||
{"has been kicked because of an affiliation change","estas forpelita pro aparteneca ŝanĝo"}.
|
||||
{"has been kicked because the room has been changed to members-only","estas forpelita ĉar la babilejo fariĝis sole por membroj"}.
|
||||
{"has been kicked","estas forpelita"}.
|
||||
{"Host","Gastigo"}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","Se vi ne vidas la CAPTCHA-imagon jene, vizitu la teksaĵ-paĝon."}.
|
||||
{"Import Directory","Importu dosierujo"}.
|
||||
{"Import File","Importu dosieron"}.
|
||||
|
@ -163,21 +146,17 @@
|
|||
{"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"}.
|
||||
{"July","Julio"}.
|
||||
{"June","Junio"}.
|
||||
{"Just created","Ĵus kreita"}.
|
||||
{"Label:","Etikedo:"}.
|
||||
{"Last Activity","Lasta aktiveco"}.
|
||||
{"Last login","Lasta ensaluto"}.
|
||||
{"Last month","Lasta monato"}.
|
||||
{"Last year","Lasta jaro"}.
|
||||
{"leaves the room","eliras la babilejo"}.
|
||||
{"List of rooms","Listo de babilejoj"}.
|
||||
{"Low level update script","Bazanivela ĝisdatigo-skripto"}.
|
||||
{"Make participants list public","Farigu partoprento-liston publika"}.
|
||||
{"Make room CAPTCHA protected","Protektu babilejon per CAPTCHA"}.
|
||||
{"Make room members-only","Farigu babilejon sole por membroj"}.
|
||||
|
@ -191,20 +170,16 @@
|
|||
{"Maximum Number of Occupants","Limigo de nombro de partoprenantoj"}.
|
||||
{"May","Majo"}.
|
||||
{"Membership is required to enter this room","Membreco estas bezonata por eniri ĉi tiun babilejon"}.
|
||||
{"Members:","Membroj:"}.
|
||||
{"Memory","Memoro"}.
|
||||
{"Message body","Teksto de mesaĝo"}.
|
||||
{"Middle Name","Meza Nomo"}.
|
||||
{"Minimum interval between voice requests (in seconds)","Minimuma intervalo inter voĉ-petoj (je sekundoj)"}.
|
||||
{"Moderator privileges required","Moderantaj rajtoj bezonata"}.
|
||||
{"Modified modules","Ĝisdatigitaj moduloj"}.
|
||||
{"Module failed to handle the query","Modulo malsukcesis trakti la informpeton"}.
|
||||
{"Monday","Lundo"}.
|
||||
{"Multicast","Multicast"}.
|
||||
{"Multiple <item/> elements are not allowed by RFC6121","RFC 6121 ne permesas plurajn <item/>-elementojn"}.
|
||||
{"Multi-User Chat","Grupbabilado"}.
|
||||
{"Name","Nomo"}.
|
||||
{"Name:","Nomo:"}.
|
||||
{"Natural Language for Room Discussions","Homa Lingvo por Diskutoj en Babilejo"}.
|
||||
{"Never","Neniam"}.
|
||||
{"New Password:","Nova Pasvorto:"}.
|
||||
|
@ -236,11 +211,8 @@
|
|||
{"Number of online users","Nombro de konektataj uzantoj"}.
|
||||
{"Number of registered users","Nombro de registritaj uzantoj"}.
|
||||
{"October","Oktobro"}.
|
||||
{"Offline Messages","Liverontaj mesaĝoj"}.
|
||||
{"Offline Messages:","Liverontaj mesaĝoj"}.
|
||||
{"OK","Bone"}.
|
||||
{"Old Password:","Malnova Pasvorto:"}.
|
||||
{"Online Users:","Konektataj uzantoj:"}.
|
||||
{"Online Users","Konektataj Uzantoj"}.
|
||||
{"Online","Konektata"}.
|
||||
{"Only deliver notifications to available users","Nur liveru sciigojn al konektataj uzantoj"}.
|
||||
|
@ -257,16 +229,13 @@
|
|||
{"Organization Name","Organiz-nomo"}.
|
||||
{"Organization Unit","Organiz-parto"}.
|
||||
{"Outgoing s2s Connections","Elirantaj s-al-s-konektoj"}.
|
||||
{"Outgoing s2s Connections:","Elirantaj s-al-s-konektoj:"}.
|
||||
{"Owner privileges required","Mastraj rajtoj bezonata"}.
|
||||
{"Packet","Pakaĵo"}.
|
||||
{"Password Verification","Pasvortkontrolo"}.
|
||||
{"Password Verification:","Pasvortkontrolo:"}.
|
||||
{"Password","Pasvorto"}.
|
||||
{"Password:","Pasvorto:"}.
|
||||
{"Path to Dir","Vojo al dosierujo"}.
|
||||
{"Path to File","Voje de dosiero"}.
|
||||
{"Pending","Atendanta"}.
|
||||
{"Period: ","Periodo: "}.
|
||||
{"Persist items to storage","Savu erojn en konservado"}.
|
||||
{"Ping","Sondaĵo"}.
|
||||
|
@ -285,17 +254,12 @@
|
|||
{"RAM copy","RAM-kopio"}.
|
||||
{"Really delete message of the day?","Ĉu vere forigi mesaĝon de la tago?"}.
|
||||
{"Recipient is not in the conference room","Ricevanto ne ĉeestas en la babilejo"}.
|
||||
{"Registered Users","Registritaj uzantoj"}.
|
||||
{"Registered Users:","Registritaj uzantoj:"}.
|
||||
{"Register","Registru"}.
|
||||
{"Remote copy","Fora kopio"}.
|
||||
{"Remove All Offline Messages","Forigu ĉiujn liverontajn mesaĝojn"}.
|
||||
{"Remove User","Forigu uzanton"}.
|
||||
{"Remove","Forigu"}.
|
||||
{"Replaced by new connection","Anstataŭigita je nova konekto"}.
|
||||
{"Resources","Risurcoj"}.
|
||||
{"Restart Service","Restartu Servon"}.
|
||||
{"Restart","Restartu"}.
|
||||
{"Restore Backup from File at ","Restaŭrigu de dosiero el "}.
|
||||
{"Restore binary backup after next ejabberd restart (requires less memory):","Restaŭrigu duuman sekurkopion post sekvonta ejabberd-restarto"}.
|
||||
{"Restore binary backup immediately:","Restaŭrigu duuman sekurkopion tuj:"}.
|
||||
|
@ -308,10 +272,8 @@
|
|||
{"Room title","Babilejo-nomo"}.
|
||||
{"Roster groups allowed to subscribe","Kontaktlist-grupoj kiuj rajtas aboni"}.
|
||||
{"Roster size","Kontaktlist-grando"}.
|
||||
{"RPC Call Error","Eraro de RPC-alvoko"}.
|
||||
{"Running Nodes","Funkciantaj Nodoj"}.
|
||||
{"Saturday","Sabato"}.
|
||||
{"Script check","Skript-kontrolo"}.
|
||||
{"Search Results for ","Serĉ-rezultoj de "}.
|
||||
{"Search users in ","Serĉu uzantojn en "}.
|
||||
{"Send announcement to all online users on all hosts","Sendu anoncon al ĉiu konektata uzanto de ĉiu gastigo"}.
|
||||
|
@ -329,19 +291,13 @@
|
|||
{"Specify the access model","Specifu atingo-modelon"}.
|
||||
{"Specify the event message type","Specifu tipo de event-mesaĝo"}.
|
||||
{"Specify the publisher model","Enmetu publikadan modelon"}.
|
||||
{"Statistics of ~p","Statistikoj de ~p"}.
|
||||
{"Statistics","Statistikoj"}.
|
||||
{"Stop","Haltigu"}.
|
||||
{"Stopped Nodes","Neaktivaj Nodoj"}.
|
||||
{"Storage Type","Konserv-tipo"}.
|
||||
{"Store binary backup:","Konservu duuman sekurkopion:"}.
|
||||
{"Store plain text backup:","Skribu sekurkopion en plata tekstdosiero"}.
|
||||
{"Subject","Temo"}.
|
||||
{"Submit","Sendu"}.
|
||||
{"Submitted","Sendita"}.
|
||||
{"Subscriber Address","Abonanta adreso"}.
|
||||
{"Subscribers may publish","Abonantoj rajtas publici"}.
|
||||
{"Subscription","Abono"}.
|
||||
{"Sunday","Dimanĉo"}.
|
||||
{"That nickname is already in use by another occupant","Tiu kaŝnomo jam estas uzata de alia partoprenanto"}.
|
||||
{"That nickname is registered by another person","Kaŝnomo estas registrita de alia persono"}.
|
||||
|
@ -358,28 +314,16 @@
|
|||
{"This room is not anonymous","Ĉi tiu babilejo ne estas anonima"}.
|
||||
{"Thursday","Ĵaŭdo"}.
|
||||
{"Time delay","Prokrasto"}.
|
||||
{"Time","Tempo"}.
|
||||
{"To","Ĝis"}.
|
||||
{"Too many CAPTCHA requests","Tro multaj CAPTCHA-petoj"}.
|
||||
{"Too many (~p) failed authentications from this IP address (~s). The address will be unblocked at ~s UTC","Tro da malsukcesaj aŭtentprovoj (~p) de ĉi tiu IP-adreso (~s). La adreso estos malbarata je ~s UTC."}.
|
||||
{"Too many unacked stanzas","Tro da neagnoskitaj stancoj"}.
|
||||
{"Total rooms","Babilejoj"}.
|
||||
{"Traffic rate limit is exceeded","Trafikrapida limigo superita"}.
|
||||
{"Transactions Aborted:","Transakcioj nuligitaj"}.
|
||||
{"Transactions Committed:","Transakcioj enmetitaj"}.
|
||||
{"Transactions Logged:","Transakcioj protokolitaj"}.
|
||||
{"Transactions Restarted:","Transakcioj restartitaj"}.
|
||||
{"Tuesday","Mardo"}.
|
||||
{"Unable to generate a CAPTCHA","Ne eblis krei CAPTCHA"}.
|
||||
{"Unauthorized","Nepermesita"}.
|
||||
{"Unregister","Malregistru"}.
|
||||
{"Update message of the day (don't send)","Ŝanĝu mesaĝon de la tago (ne sendu)"}.
|
||||
{"Update message of the day on all hosts (don't send)","Ŝanĝu mesaĝon de la tago je ĉiu gastigo (ne sendu)"}.
|
||||
{"Update ~p","Ĝisdatigu ~p-n"}.
|
||||
{"Update plan","Ĝisdatigo-plano"}.
|
||||
{"Update script","Ĝisdatigo-skripto"}.
|
||||
{"Update","Ĝisdatigu"}.
|
||||
{"Uptime:","Daŭro de funkciado"}.
|
||||
{"URL for Archived Discussion Logs","Retpaĝa adreso de Enarkivigitaj Diskutprotokoloj"}.
|
||||
{"User JID","Uzant-JID"}.
|
||||
{"User Management","Uzanto-administrado"}.
|
||||
|
@ -388,7 +332,6 @@
|
|||
{"Users Last Activity","Lasta aktiveco de uzanto"}.
|
||||
{"Users","Uzantoj"}.
|
||||
{"User","Uzanto"}.
|
||||
{"Validate","Validigu"}.
|
||||
{"vCard User Search","Serĉado de vizitkartoj"}.
|
||||
{"Virtual Hosts","Virtual-gastigoj"}.
|
||||
{"Visitors are not allowed to change their nicknames in this room","Ne estas permesata al vizitantoj ŝanĝi siajn kaŝnomojn en ĉi tiu ĉambro"}.
|
||||
|
|
|
@ -12,17 +12,10 @@
|
|||
{"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"}.
|
||||
{"Add a hat to a user","Añade un sombrero a un usuario"}.
|
||||
{"Add Jabber ID","Añadir Jabber ID"}.
|
||||
{"Add New","Añadir nuevo"}.
|
||||
{"Add User","Añadir usuario"}.
|
||||
{"Administration of ","Administración de "}.
|
||||
{"Administration","Administración"}.
|
||||
|
@ -53,7 +46,9 @@
|
|||
{"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"}.
|
||||
{"API Commands","Comandos API"}.
|
||||
{"April","Abril"}.
|
||||
{"Arguments","Argumentos"}.
|
||||
{"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"}.
|
||||
{"Attribute 'jid' is not allowed here","El atributo 'jid' no está permitido aqui"}.
|
||||
|
@ -93,34 +88,25 @@
|
|||
{"Choose whether to approve this entity's subscription.","Decidir si aprobar la subscripción de esta entidad."}.
|
||||
{"City","Ciudad"}.
|
||||
{"Client acknowledged more stanzas than sent by server","El cliente ha reconocido más paquetes de los que el servidor ha enviado"}.
|
||||
{"Clustering","Clustering"}.
|
||||
{"Commands","Comandos"}.
|
||||
{"Conference room does not exist","La sala de conferencias no existe"}.
|
||||
{"Configuration of room ~s","Configuración para la sala ~s"}.
|
||||
{"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"}.
|
||||
{"Database failure","Error en la base de datos"}.
|
||||
{"Database Tables at ~p","Tablas de la base de datos en ~p"}.
|
||||
{"Database Tables Configuration at ","Configuración de tablas de la base de datos en "}.
|
||||
{"Database","Base de datos"}.
|
||||
{"December","Diciembre"}.
|
||||
{"Default users as participants","Los usuarios son participantes por defecto"}.
|
||||
{"Delete content","Borrar contenido"}.
|
||||
{"Delete message of the day on all hosts","Borrar el mensaje del día en todos los dominios"}.
|
||||
{"Delete message of the day","Borrar mensaje del dia"}.
|
||||
{"Delete Selected","Borrar los seleccionados"}.
|
||||
{"Delete table","Borrar tabla"}.
|
||||
{"Delete User","Borrar usuario"}.
|
||||
{"Deliver event notifications","Entregar notificaciones de eventos"}.
|
||||
{"Deliver payloads with event notifications","Enviar contenidos junto con las notificaciones de eventos"}.
|
||||
{"Description:","Descripción:"}.
|
||||
{"Disc only copy","Copia en disco solamente"}.
|
||||
{"'Displayed groups' not added (they do not exist!): ","'Mostrados' que no han sido añadidos (¡no existen!): "}.
|
||||
{"Displayed:","Mostrados:"}.
|
||||
{"Don't tell your password to anybody, not even the administrators of the XMPP server.","No le digas tu contraseña a nadie, ni siquiera a los administradores del servidor XMPP."}.
|
||||
{"Dump Backup to Text File at ","Exporta copia de seguridad a fichero de texto en "}.
|
||||
{"Dump to Text File","Exportar a fichero de texto"}.
|
||||
|
@ -136,7 +122,6 @@
|
|||
{"ejabberd vCard module","Módulo vCard para ejabberd"}.
|
||||
{"ejabberd Web Admin","ejabberd Web Admin"}.
|
||||
{"ejabberd","ejabberd"}.
|
||||
{"Elements","Elementos"}.
|
||||
{"Email Address","Dirección de correo electrónico"}.
|
||||
{"Email","Correo electrónico"}.
|
||||
{"Enable hats","Activar sombreros"}.
|
||||
|
@ -151,7 +136,6 @@
|
|||
{"Enter path to text file","Introduce ruta al fichero de texto"}.
|
||||
{"Enter the text you see","Teclea el texto que ves"}.
|
||||
{"Erlang XMPP Server","Servidor XMPP en Erlang"}.
|
||||
{"Error","Error"}.
|
||||
{"Exclude Jabber IDs from CAPTCHA challenge","Excluir Jabber IDs de las pruebas de CAPTCHA"}.
|
||||
{"Export all tables as SQL queries to a file:","Exportar todas las tablas a un fichero SQL:"}.
|
||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exportar datos de todos los usuarios del servidor a ficheros PIEFXIS (XEP-0227):"}.
|
||||
|
@ -170,7 +154,6 @@
|
|||
{"Fill in the form to search for any matching XMPP User","Rellena campos para buscar usuarios XMPP que concuerden"}.
|
||||
{"Friday","Viernes"}.
|
||||
{"From ~ts","De ~ts"}.
|
||||
{"From","De"}.
|
||||
{"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"}.
|
||||
|
@ -180,23 +163,19 @@
|
|||
{"Get Number of Registered Users","Ver número de usuarios registrados"}.
|
||||
{"Get Pending","Obtener pendientes"}.
|
||||
{"Get User Last Login Time","Ver fecha de la última conexión de usuario"}.
|
||||
{"Get User Password","Ver contraseña de usuario"}.
|
||||
{"Get User Statistics","Ver estadísticas de usuario"}.
|
||||
{"Given Name","Nombre"}.
|
||||
{"Given Name","Nombre de pila"}.
|
||||
{"Grant voice to this person?","¿Conceder voz a esta persona?"}.
|
||||
{"Group","Grupo"}.
|
||||
{"Groups that will be displayed to the members","Grupos que se mostrarán a los miembros"}.
|
||||
{"Groups","Grupos"}.
|
||||
{"has been banned","ha sido bloqueado"}.
|
||||
{"has been kicked because of a system shutdown","ha sido expulsado porque el sistema se va a detener"}.
|
||||
{"has been kicked because of an affiliation change","ha sido expulsado por un cambio de su afiliación"}.
|
||||
{"has been kicked because the room has been changed to members-only","ha sido expulsado porque la sala es ahora solo para miembros"}.
|
||||
{"has been kicked","ha sido expulsado"}.
|
||||
{"Hash of the vCard-temp avatar of this room","Hash del avatar vCard-temp de esta sala"}.
|
||||
{"Hat title","Título del sombrero"}.
|
||||
{"Hat URI","Dirección del sombrero"}.
|
||||
{"Hats limit exceeded","Se ha excedido el límite de sombreros"}.
|
||||
{"Host unknown","Dominio desconocido"}.
|
||||
{"Host","Dominio"}.
|
||||
{"HTTP File Upload","Subir fichero por HTTP"}.
|
||||
{"Idle connection","Conexión sin uso"}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","Si no ves la imagen CAPTCHA aquí, visita la página web."}.
|
||||
|
@ -210,7 +189,6 @@
|
|||
{"Import Users From jabberd14 Spool Files","Importar usuarios de ficheros spool de jabberd-1.4"}.
|
||||
{"Improper domain part of 'from' attribute","Parte de dominio impropia en el atributo 'from'"}.
|
||||
{"Improper message type","Tipo de mensaje incorrecto"}.
|
||||
{"Incoming s2s Connections:","Conexiones S2S entrantes:"}.
|
||||
{"Incorrect CAPTCHA submit","El CAPTCHA proporcionado es incorrecto"}.
|
||||
{"Incorrect data form","Formulario de datos incorrecto"}.
|
||||
{"Incorrect password","Contraseña incorrecta"}.
|
||||
|
@ -230,7 +208,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","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"}.
|
||||
|
@ -241,7 +218,6 @@
|
|||
{"July","Julio"}.
|
||||
{"June","Junio"}.
|
||||
{"Just created","Recién creada"}.
|
||||
{"Label:","Etiqueta:"}.
|
||||
{"Last Activity","Última actividad"}.
|
||||
{"Last login","Última conexión"}.
|
||||
{"Last message","Último mensaje"}.
|
||||
|
@ -249,11 +225,10 @@
|
|||
{"Last year","Último año"}.
|
||||
{"Least significant bits of SHA-256 hash of text should equal hexadecimal label","Los bits menos significativos del hash SHA-256 del texto deberían ser iguales a la etiqueta hexadecimal"}.
|
||||
{"leaves the room","sale de la sala"}.
|
||||
{"List of rooms","Lista de salas"}.
|
||||
{"List of users with hats","Lista de usuarios con sombreros"}.
|
||||
{"List users with hats","Listar usuarios con sombreros"}.
|
||||
{"Logged Out","Desconectad@"}.
|
||||
{"Logging","Histórico de mensajes"}.
|
||||
{"Low level update script","Script de actualización a bajo nivel"}.
|
||||
{"Make participants list public","La lista de participantes es pública"}.
|
||||
{"Make room CAPTCHA protected","Proteger la sala con CAPTCHA"}.
|
||||
{"Make room members-only","Sala sólo para miembros"}.
|
||||
|
@ -271,11 +246,8 @@
|
|||
{"Maximum number of items to persist","Máximo número de elementos que persisten"}.
|
||||
{"Maximum Number of Occupants","Número máximo de ocupantes"}.
|
||||
{"May","Mayo"}.
|
||||
{"Members not added (inexistent vhost!): ","Miembros no añadidos (el vhost no existe): "}.
|
||||
{"Membership is required to enter this room","Necesitas ser miembro de esta sala para poder entrar"}.
|
||||
{"Members:","Miembros:"}.
|
||||
{"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.","Memoriza tu contraseña, o apúntala en un papel en un lugar seguro. En XMPP no hay un método automatizado para recuperar la contraseña si la olvidas."}.
|
||||
{"Memory","Memoria"}.
|
||||
{"Mere Availability in XMPP (No Show Value)","Disponible en XMPP (sin valor de Mostrado)"}.
|
||||
{"Message body","Cuerpo del mensaje"}.
|
||||
{"Message not found in forwarded payload","Mensaje no encontrado en el contenido reenviado"}.
|
||||
|
@ -287,15 +259,12 @@
|
|||
{"Moderator privileges required","Se necesita privilegios de moderador"}.
|
||||
{"Moderator","Moderador"}.
|
||||
{"Moderators Only","Solo moderadores"}.
|
||||
{"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"}.
|
||||
{"Name","Nombre"}.
|
||||
{"Name:","Nombre:"}.
|
||||
{"Natural Language for Room Discussions","Idioma natural en las charlas de la sala"}.
|
||||
{"Natural-Language Room Name","Nombre de la sala en el idioma natural de la sala"}.
|
||||
{"Neither 'jid' nor 'nick' attribute found","No se encontraron los atributos 'jid' ni 'nick'"}.
|
||||
|
@ -360,14 +329,10 @@
|
|||
{"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"}.
|
||||
{"Offline Messages:","Mensajes diferidos:"}.
|
||||
{"OK","Aceptar"}.
|
||||
{"Old Password:","Contraseña antigua:"}.
|
||||
{"Online Users","Usuarios conectados"}.
|
||||
{"Online Users:","Usuarios conectados:"}.
|
||||
{"Online","Conectado"}.
|
||||
{"Only admins can see this","Solo los administradores pueden ver esto"}.
|
||||
{"Only collection node owners may associate leaf nodes with the collection","Solo los dueños e la colección de nodos pueden asociar nodos hoja a la colección"}.
|
||||
{"Only deliver notifications to available users","Solo enviar notificaciones a los usuarios disponibles"}.
|
||||
{"Only <enable/> or <disable/> tags are allowed","Solo se permiten las etiquetas <enable/> o <disable/>"}.
|
||||
|
@ -375,6 +340,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"}.
|
||||
|
@ -386,10 +352,8 @@
|
|||
{"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"}.
|
||||
|
@ -398,8 +362,7 @@
|
|||
{"Password:","Contraseña:"}.
|
||||
{"Path to Dir","Ruta al directorio"}.
|
||||
{"Path to File","Ruta al fichero"}.
|
||||
{"Payload type","Tipo de payload"}.
|
||||
{"Pending","Pendiente"}.
|
||||
{"Payload semantic type information","Información sobre el tipo semántico de la carga útil"}.
|
||||
{"Period: ","Periodo: "}.
|
||||
{"Persist items to storage","Persistir elementos al almacenar"}.
|
||||
{"Persistent","Permanente"}.
|
||||
|
@ -433,26 +396,22 @@
|
|||
{"Receive notification of new nodes only","Recibir notificaciones solo de nuevos nodos"}.
|
||||
{"Recipient is not in the conference room","El receptor no está en la sala de conferencia"}.
|
||||
{"Register an XMPP account","Registrar una cuenta XMPP"}.
|
||||
{"Registered Users","Usuarios registrados"}.
|
||||
{"Registered Users:","Usuarios registrados:"}.
|
||||
{"Register","Registrar"}.
|
||||
{"Remote copy","Copia remota"}.
|
||||
{"Remove a hat from a user","Quitarle un sombrero a un usuario"}.
|
||||
{"Remove All Offline Messages","Borrar todos los mensajes diferidos"}.
|
||||
{"Remove User","Eliminar usuario"}.
|
||||
{"Remove","Borrar"}.
|
||||
{"Replaced by new connection","Reemplazado por una nueva conexión"}.
|
||||
{"Request has timed out","La petición ha caducado"}.
|
||||
{"Request is ignored","La petición ha sido ignorada"}.
|
||||
{"Requested role","Rol solicitado"}.
|
||||
{"Resources","Recursos"}.
|
||||
{"Restart Service","Reiniciar el servicio"}.
|
||||
{"Restart","Reiniciar"}.
|
||||
{"Restore Backup from File at ","Restaura copia de seguridad desde el fichero en "}.
|
||||
{"Restore binary backup after next ejabberd restart (requires less memory):","Restaurar copia de seguridad binaria en el siguiente reinicio de ejabberd (requiere menos memoria que si instantánea):"}.
|
||||
{"Restore binary backup immediately:","Restaurar inmediatamente copia de seguridad binaria:"}.
|
||||
{"Restore plain text backup immediately:","Restaurar copias de seguridad de texto plano inmediatamente:"}.
|
||||
{"Restore","Restaurar"}.
|
||||
{"Result","Resultado"}.
|
||||
{"Roles and Affiliations that May Retrieve Member List","Roles y Afiliaciones que pueden obtener la lista de miembros"}.
|
||||
{"Roles for which Presence is Broadcasted","Roles para los que sí se difunde su Presencia"}.
|
||||
{"Roles that May Send Private Messages","Roles que pueden enviar mensajes privados"}.
|
||||
|
@ -463,20 +422,15 @@
|
|||
{"Room terminates","Cerrando la sala"}.
|
||||
{"Room title","Título de la sala"}.
|
||||
{"Roster groups allowed to subscribe","Grupos de contactos que pueden suscribirse"}.
|
||||
{"Roster of ~ts","Lista de contactos de ~ts"}.
|
||||
{"Roster size","Tamaño de la lista de contactos"}.
|
||||
{"Roster:","Lista de contactos:"}.
|
||||
{"RPC Call Error","Error en la llamada RPC"}.
|
||||
{"Running Nodes","Nodos funcionando"}.
|
||||
{"~s invites you to the room ~s","~s te invita a la sala ~s"}.
|
||||
{"Saturday","Sábado"}.
|
||||
{"Script check","Comprobación de script"}.
|
||||
{"Search from the date","Buscar desde la fecha"}.
|
||||
{"Search Results for ","Buscar resultados por "}.
|
||||
{"Search the text","Buscar el texto"}.
|
||||
{"Search until the date","Buscar hasta la fecha"}.
|
||||
{"Search users in ","Buscar usuarios en "}.
|
||||
{"Select All","Seleccionar todo"}.
|
||||
{"Send announcement to all online users on all hosts","Enviar anuncio a todos los usuarios conectados en todos los dominios"}.
|
||||
{"Send announcement to all online users","Enviar anuncio a todos los usuarios conectados"}.
|
||||
{"Send announcement to all users on all hosts","Enviar anuncio a todos los usuarios en todos los dominios"}.
|
||||
|
@ -489,6 +443,7 @@
|
|||
{"Set message of the day on all hosts and send to online users","Poner mensaje del día en todos los dominios y enviar a los usuarios conectados"}.
|
||||
{"Shared Roster Groups","Grupos Compartidos"}.
|
||||
{"Show Integral Table","Mostrar Tabla Integral"}.
|
||||
{"Show Occupants Join/Leave","Mostrar personas activas Entrar/Salir"}.
|
||||
{"Show Ordinary Table","Mostrar Tabla Ordinaria"}.
|
||||
{"Shut Down Service","Detener el servicio"}.
|
||||
{"SOCKS5 Bytestreams","SOCKS5 Bytestreams"}.
|
||||
|
@ -497,25 +452,20 @@
|
|||
{"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"}.
|
||||
{"Statistics","Estadísticas"}.
|
||||
{"Stop","Detener"}.
|
||||
{"Stopped Nodes","Nodos detenidos"}.
|
||||
{"Storage Type","Tipo de almacenamiento"}.
|
||||
{"Store binary backup:","Guardar copia de seguridad binaria:"}.
|
||||
{"Store plain text backup:","Guardar copia de seguridad en texto plano:"}.
|
||||
{"Stream management is already enabled","Ya está activada la administración de la conexión"}.
|
||||
{"Stream management is not enabled","No está activada la administración de la conexión"}.
|
||||
{"Subject","Asunto"}.
|
||||
{"Submit","Enviar"}.
|
||||
{"Submitted","Enviado"}.
|
||||
{"Subscriber Address","Dirección del subscriptor"}.
|
||||
{"Subscribers may publish","Los suscriptores pueden publicar"}.
|
||||
{"Subscription requests must be approved and only subscribers may retrieve items","Las peticiones de suscripción deben ser aprobadas y solo los suscriptores pueden obtener elementos"}.
|
||||
{"Subscriptions are not allowed","Las subscripciones no están permitidas"}.
|
||||
{"Subscription","Subscripción"}.
|
||||
{"Sunday","Domingo"}.
|
||||
{"Text associated with a picture","Texto asociado con una imagen"}.
|
||||
{"Text associated with a sound","Texto asociado con un sonido"}.
|
||||
|
@ -561,10 +511,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: "}.
|
||||
|
@ -578,7 +528,6 @@
|
|||
{"Thursday","Jueves"}.
|
||||
{"Time delay","Retraso temporal"}.
|
||||
{"Timed out waiting for stream resumption","Ha pasado demasiado tiempo esperando que la conexión se restablezca"}.
|
||||
{"Time","Fecha"}.
|
||||
{"To register, visit ~s","Para registrarte, visita ~s"}.
|
||||
{"To ~ts","A ~ts"}.
|
||||
{"Token TTL","Token TTL"}.
|
||||
|
@ -591,13 +540,8 @@
|
|||
{"Too many receiver fields were specified","Se han especificado demasiados campos de destinatario"}.
|
||||
{"Too many unacked stanzas","Demasiados mensajes sin haber reconocido recibirlos"}.
|
||||
{"Too many users in this conference","Demasiados usuarios en esta sala"}.
|
||||
{"To","Para"}.
|
||||
{"Total rooms","Salas totales"}.
|
||||
{"Traffic rate limit is exceeded","Se ha excedido el límite de tráfico"}.
|
||||
{"Transactions Aborted:","Transacciones abortadas:"}.
|
||||
{"Transactions Committed:","Transacciones finalizadas:"}.
|
||||
{"Transactions Logged:","Transacciones registradas:"}.
|
||||
{"Transactions Restarted:","Transacciones reiniciadas:"}.
|
||||
{"~ts's MAM Archive","Archivo MAM de ~ts"}.
|
||||
{"~ts's Offline Messages Queue","Cola de mensajes diferidos de ~ts"}.
|
||||
{"Tuesday","Martes"}.
|
||||
{"Unable to generate a CAPTCHA","No se pudo generar un CAPTCHA"}.
|
||||
|
@ -608,24 +552,20 @@
|
|||
{"Uninstall","Desinstalar"}.
|
||||
{"Unregister an XMPP account","Borrar una cuenta XMPP"}.
|
||||
{"Unregister","Borrar"}.
|
||||
{"Unselect All","Deseleccionar todo"}.
|
||||
{"Unsupported <index/> element","Elemento <index/> no soportado"}.
|
||||
{"Unsupported version","Versión no soportada"}.
|
||||
{"Update message of the day (don't send)","Actualizar mensaje del dia, pero no enviarlo"}.
|
||||
{"Update message of the day on all hosts (don't send)","Actualizar el mensaje del día en todos los dominos (pero no enviarlo)"}.
|
||||
{"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"}.
|
||||
{"Updating the vCard is not supported by the vCard storage backend","La actualización de la vCard no es compatible con el vCard almacenamiento backend"}.
|
||||
{"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"}.
|
||||
{"User JID","Jabber ID del usuario"}.
|
||||
{"User (jid)","Usuario (jid)"}.
|
||||
{"User Management","Administración de usuarios"}.
|
||||
{"User not allowed to perform an IQ set on another user's vCard.","No se permite al usuario realizar un IQ establecido en la vCard de otro usuario."}.
|
||||
{"User removed","Usuario eliminado"}.
|
||||
{"User session not found","Sesión de usuario no encontrada"}.
|
||||
{"User session terminated","Sesión de usuario terminada"}.
|
||||
|
@ -635,7 +575,6 @@
|
|||
{"Users Last Activity","Última actividad de los usuarios"}.
|
||||
{"Users","Usuarios"}.
|
||||
{"User","Usuario"}.
|
||||
{"Validate","Validar"}.
|
||||
{"Value 'get' of 'type' attribute is not allowed","El valor 'get' del atributo 'type' no está permitido"}.
|
||||
{"Value of '~s' should be boolean","El valor de '~s' debería ser booleano"}.
|
||||
{"Value of '~s' should be datetime string","El valor de '~s' debería ser una fecha"}.
|
||||
|
@ -643,14 +582,13 @@
|
|||
{"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"}.
|
||||
{"Visitors are not allowed to change their nicknames in this room","Los visitantes no tienen permitido cambiar sus apodos en esta sala"}.
|
||||
{"Visitors are not allowed to send messages to all occupants","Los visitantes no pueden enviar mensajes a todos los ocupantes"}.
|
||||
{"Visitor","Visitante"}.
|
||||
{"Voice request","Petición de voz"}.
|
||||
{"Voice requests are disabled in this conference","Las peticiones de voz están desactivadas en esta sala"}.
|
||||
{"Web client which allows to join the room anonymously","Cliente web que permite entrar en la sala anonimamente"}.
|
||||
{"Wednesday","Miércoles"}.
|
||||
{"When a new subscription is processed and whenever a subscriber comes online","Cuando se procesa una nueva suscripción y cuando un suscriptor se conecta"}.
|
||||
{"When a new subscription is processed","Cuando se procesa una nueva suscripción"}.
|
||||
|
@ -663,6 +601,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"}.
|
||||
|
@ -674,6 +613,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"}.
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue