mirror of
https://github.com/osmarks/ngircd.git
synced 2025-09-27 06:24:04 +00:00
Compare commits
913 Commits
rel-19-rc1
...
rel-26
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0f717bfd77 | ||
![]() |
ed9d8e7950 | ||
![]() |
4bcf4613f9 | ||
![]() |
c55a832806 | ||
![]() |
3dedd57f7f | ||
![]() |
07cb8ed9ae | ||
![]() |
b003d469f1 | ||
![]() |
15c7444283 | ||
![]() |
eb46f3d96d | ||
![]() |
a84cba8f78 | ||
![]() |
d697de3186 | ||
![]() |
02cf31c0e2 | ||
![]() |
430bb22376 | ||
![]() |
dc6807338e | ||
![]() |
0d503945cb | ||
![]() |
bae68eb612 | ||
![]() |
03aec7d0b3 | ||
![]() |
5d5fdfb3fd | ||
![]() |
05261c020e | ||
![]() |
e860807500 | ||
![]() |
e889de9d92 | ||
![]() |
fcf2874a9d | ||
![]() |
4b7e8db418 | ||
![]() |
bc22f41c51 | ||
![]() |
d11f13f187 | ||
![]() |
21f33e5911 | ||
![]() |
db88b92c8a | ||
![]() |
02850008f4 | ||
![]() |
52d8fa2c09 | ||
![]() |
1f40776bc1 | ||
![]() |
387a29a7fd | ||
![]() |
54fac57603 | ||
![]() |
9f05f5ee61 | ||
![]() |
629a45ee0f | ||
![]() |
8d414b079c | ||
![]() |
8a37695bf3 | ||
![]() |
71e9bb1ca6 | ||
![]() |
0dc692b1f7 | ||
![]() |
79a917f954 | ||
![]() |
11ea6a5070 | ||
![]() |
42e8654d7b | ||
![]() |
1fc54ebef1 | ||
![]() |
c2c84a1d26 | ||
![]() |
05324b232f | ||
![]() |
ea1207238f | ||
![]() |
830f00e953 | ||
![]() |
14777c18cf | ||
![]() |
e4a6bd5099 | ||
![]() |
ab62dd27dc | ||
![]() |
c6e3c13f27 | ||
![]() |
04de1423eb | ||
![]() |
13b8324c4a | ||
![]() |
f27827d793 | ||
![]() |
86f3c563d6 | ||
![]() |
eead4a631f | ||
![]() |
9c5e42458e | ||
![]() |
61ac8be2fd | ||
![]() |
3aa1d880fe | ||
![]() |
ba3b22b851 | ||
![]() |
4d519cfdbf | ||
![]() |
fed22184c5 | ||
![]() |
a3072ce698 | ||
![]() |
decf98d5ef | ||
![]() |
a77353361b | ||
![]() |
3f7caff630 | ||
![]() |
8d173a3328 | ||
![]() |
e7cb9b1a00 | ||
![]() |
c411643d45 | ||
![]() |
2e1797d5a5 | ||
![]() |
f5fa7db4ba | ||
![]() |
22cae1b5fc | ||
![]() |
fb5aa8f652 | ||
![]() |
91e87af605 | ||
![]() |
9286686c09 | ||
![]() |
1f69f1d0ab | ||
![]() |
b03fcaab5a | ||
![]() |
70eb1ee57d | ||
![]() |
80437b2533 | ||
![]() |
de1de40551 | ||
![]() |
4169cb25e6 | ||
![]() |
9a69c02567 | ||
![]() |
147e424d98 | ||
![]() |
e954b59d41 | ||
![]() |
b1893e740e | ||
![]() |
2c495a1fe7 | ||
![]() |
52c53f523a | ||
![]() |
f8002057f2 | ||
![]() |
13122bc97d | ||
![]() |
bb1d014aba | ||
![]() |
ad8c4b8efb | ||
![]() |
ad86a41eee | ||
![]() |
aec86aa84c | ||
![]() |
74631fa728 | ||
![]() |
1d4f80b422 | ||
![]() |
fe01ef9a51 | ||
![]() |
96bad2b861 | ||
![]() |
456eea6f18 | ||
![]() |
7690716e4f | ||
![]() |
c97fb2e93e | ||
![]() |
c8162a80be | ||
![]() |
e8e04b4c8f | ||
![]() |
a38eea8987 | ||
![]() |
d0f9d3d92e | ||
![]() |
bb4101cd6c | ||
![]() |
e29e15ca27 | ||
![]() |
8bd88be8ad | ||
![]() |
fb760d9473 | ||
![]() |
7f2d21f962 | ||
![]() |
6af9476cad | ||
![]() |
263c5edb60 | ||
![]() |
b4f7aae67e | ||
![]() |
798de94d65 | ||
![]() |
ac341176da | ||
![]() |
6a622c0084 | ||
![]() |
91ef17aba2 | ||
![]() |
13761f1ec9 | ||
![]() |
03acae970d | ||
![]() |
8f0c705029 | ||
![]() |
d803ff0525 | ||
![]() |
3559940e4a | ||
![]() |
34bdb0d98a | ||
![]() |
7ed22d0b22 | ||
![]() |
d9f81ac669 | ||
![]() |
7207bef418 | ||
![]() |
619a3f3ff2 | ||
![]() |
05640f9285 | ||
![]() |
e009fc87d5 | ||
![]() |
c37d6971d6 | ||
![]() |
ddeb7b20eb | ||
![]() |
543f44bff8 | ||
![]() |
bc728f92de | ||
![]() |
2f6f6929d8 | ||
![]() |
f244ab2219 | ||
![]() |
e17d4bdec7 | ||
![]() |
b2ba3e745a | ||
![]() |
3890304b54 | ||
![]() |
a69866f3f9 | ||
![]() |
7071476d2a | ||
![]() |
3c627dd70d | ||
![]() |
879d550408 | ||
![]() |
2bb917f05a | ||
![]() |
72acf53d69 | ||
![]() |
479d7d99c1 | ||
![]() |
181da30997 | ||
![]() |
bfebdaece8 | ||
![]() |
d2a134b79c | ||
![]() |
74f021fb44 | ||
![]() |
8e09180295 | ||
![]() |
f0532c98cd | ||
![]() |
9e0e955daf | ||
![]() |
3e44738416 | ||
![]() |
02c8887543 | ||
![]() |
77861f6fe2 | ||
![]() |
e9e3df27b7 | ||
![]() |
0dc3c13469 | ||
![]() |
d0d4de4980 | ||
![]() |
85df414907 | ||
![]() |
f5ff22d98f | ||
![]() |
995bbfd627 | ||
![]() |
dd6d75d37d | ||
![]() |
daa88b7651 | ||
![]() |
2924b3d52a | ||
![]() |
a335e480c5 | ||
![]() |
dde89b1267 | ||
![]() |
455f073687 | ||
![]() |
804c240320 | ||
![]() |
fb99d7c92e | ||
![]() |
1d06ed02ce | ||
![]() |
c283b52a78 | ||
![]() |
b708c95173 | ||
![]() |
722afc1b81 | ||
![]() |
86a64ce6aa | ||
![]() |
e84000f7b8 | ||
![]() |
a93247d32f | ||
![]() |
a673a6e3af | ||
![]() |
0ab4e7bffd | ||
![]() |
8f0d24c831 | ||
![]() |
0a6e284582 | ||
![]() |
2254e92e60 | ||
![]() |
7cda2f13f4 | ||
![]() |
7dba1a0766 | ||
![]() |
055d6e8056 | ||
![]() |
432a9297f8 | ||
![]() |
4dcd5f1225 | ||
![]() |
6a5569c27d | ||
![]() |
49ab79d0e6 | ||
![]() |
cedba36965 | ||
![]() |
40bea95c08 | ||
![]() |
7c7d03b730 | ||
![]() |
4693226d69 | ||
![]() |
afb59ab8e5 | ||
![]() |
d90f0323e5 | ||
![]() |
01e590b007 | ||
![]() |
7b7ee6a3ca | ||
![]() |
46838510ab | ||
![]() |
0903343f85 | ||
![]() |
182bfac855 | ||
![]() |
1e386fb7ac | ||
![]() |
52ccba5d1e | ||
![]() |
98e9467c85 | ||
![]() |
e8dacb68dc | ||
![]() |
398022631a | ||
![]() |
f2cef85fde | ||
![]() |
6ed59a8548 | ||
![]() |
49acb68584 | ||
![]() |
d8aba40f07 | ||
![]() |
87887bc632 | ||
![]() |
cb3a4321a2 | ||
![]() |
1e84b2640e | ||
![]() |
86d27eaf89 | ||
![]() |
4acf95ab61 | ||
![]() |
57cd41d289 | ||
![]() |
eb9929e82c | ||
![]() |
c2e4c304e3 | ||
![]() |
c56138c280 | ||
![]() |
a1ce3fc779 | ||
![]() |
ccc899c7f4 | ||
![]() |
2a52befa56 | ||
![]() |
2c18e9a7f8 | ||
![]() |
9811223fb8 | ||
![]() |
0083fe177f | ||
![]() |
34578b8b30 | ||
![]() |
85dc4d8777 | ||
![]() |
64c265cf33 | ||
![]() |
b72a7a4b96 | ||
![]() |
b8482fd3cf | ||
![]() |
90ea23ab4f | ||
![]() |
6e7e744cc6 | ||
![]() |
24cec978ee | ||
![]() |
a02524465e | ||
![]() |
813ea874f8 | ||
![]() |
813897023e | ||
![]() |
a5ca8be658 | ||
![]() |
c364d67f80 | ||
![]() |
5545e1bebf | ||
![]() |
d118cd74b6 | ||
![]() |
599626d570 | ||
![]() |
571b1a8b83 | ||
![]() |
b71a0ddbd5 | ||
![]() |
7ff16e8116 | ||
![]() |
f6b7764eb5 | ||
![]() |
adfe5affed | ||
![]() |
27934afd7e | ||
![]() |
f64cb901ef | ||
![]() |
d28d838cb9 | ||
![]() |
2fc61ce8a6 | ||
![]() |
5c48d7e9c7 | ||
![]() |
0f490b5cae | ||
![]() |
a43d79aeff | ||
![]() |
93a872a36b | ||
![]() |
c4245220de | ||
![]() |
f8f7f83f5a | ||
![]() |
03c8997af3 | ||
![]() |
4396936f38 | ||
![]() |
4da04640e6 | ||
![]() |
10c7ba99e7 | ||
![]() |
1136b97690 | ||
![]() |
d9a97f2857 | ||
![]() |
a4af9024fd | ||
![]() |
6fc53558ed | ||
![]() |
21767c968d | ||
![]() |
c5da483685 | ||
![]() |
4330f5d1c9 | ||
![]() |
81b81c818c | ||
![]() |
52825cde29 | ||
![]() |
03e6568079 | ||
![]() |
7dacc314f9 | ||
![]() |
24adfb88b4 | ||
![]() |
6ed440a030 | ||
![]() |
c7bbc9a390 | ||
![]() |
6171beb7ab | ||
![]() |
2196e945e4 | ||
![]() |
f16eb1b686 | ||
![]() |
c41f18e3f9 | ||
![]() |
dbfe1beca8 | ||
![]() |
6bdae55177 | ||
![]() |
fb5ae9e844 | ||
![]() |
bd8d4e710c | ||
![]() |
9a931a549b | ||
![]() |
3c30490d54 | ||
![]() |
6250335352 | ||
![]() |
7e14bd3b58 | ||
![]() |
31b3c83c1f | ||
![]() |
6e4235443e | ||
![]() |
cdcf474f15 | ||
![]() |
f33a4067a1 | ||
![]() |
100de3e4cc | ||
![]() |
7b58538074 | ||
![]() |
3f436e1810 | ||
![]() |
967deebacd | ||
![]() |
74262a4093 | ||
![]() |
be88707027 | ||
![]() |
7d7eb735f0 | ||
![]() |
fa7fac88d2 | ||
![]() |
84ff5a6eb9 | ||
![]() |
bf2eae3249 | ||
![]() |
ffad2da835 | ||
![]() |
3f1547ecde | ||
![]() |
7893dc5241 | ||
![]() |
896d45471a | ||
![]() |
01c3552140 | ||
![]() |
ce3c4074ba | ||
![]() |
40ed94a1f2 | ||
![]() |
c1f180b87b | ||
![]() |
f5944a17e4 | ||
![]() |
06920df4bb | ||
![]() |
e864b1f33e | ||
![]() |
3f807e1045 | ||
![]() |
39b8fc65b6 | ||
![]() |
3de972e0bd | ||
![]() |
ec2bf5c5a2 | ||
![]() |
70160b3a5b | ||
![]() |
a90004b913 | ||
![]() |
9e79ed8605 | ||
![]() |
cdd6b961af | ||
![]() |
bfc727ce49 | ||
![]() |
dee824a3f0 | ||
![]() |
f5ae1dd36c | ||
![]() |
794cb51e4b | ||
![]() |
dd4b74e29b | ||
![]() |
daed2467dd | ||
![]() |
d314c75a37 | ||
![]() |
5009ab3e8c | ||
![]() |
5713c49c84 | ||
![]() |
35f1db5f28 | ||
![]() |
4c2acd55c6 | ||
![]() |
f547981188 | ||
![]() |
b35f8916a5 | ||
![]() |
3d7aa9f906 | ||
![]() |
a534e71e8d | ||
![]() |
a13bb78b1e | ||
![]() |
b130b35f48 | ||
![]() |
37090a28e8 | ||
![]() |
67256f9da1 | ||
![]() |
7b10a0e4ee | ||
![]() |
259c314d14 | ||
![]() |
51396f8f1c | ||
![]() |
6238196dac | ||
![]() |
43fb18f2f5 | ||
![]() |
a4ed90ba9a | ||
![]() |
af9161a9bc | ||
![]() |
485d0aec81 | ||
![]() |
abf280d5bd | ||
![]() |
ccc9e1baa4 | ||
![]() |
755562d147 | ||
![]() |
384b27cee0 | ||
![]() |
6496fa4655 | ||
![]() |
20b52fe33d | ||
![]() |
0fc822d8c4 | ||
![]() |
2e168c7809 | ||
![]() |
14a84dfca5 | ||
![]() |
4cb36e370e | ||
![]() |
e273bd226a | ||
![]() |
3b24ebf122 | ||
![]() |
599cfd0944 | ||
![]() |
90062111f7 | ||
![]() |
e747fe9277 | ||
![]() |
0f85c4c6a7 | ||
![]() |
e73d70ce6f | ||
![]() |
2560e5f156 | ||
![]() |
1f5508d049 | ||
![]() |
97b4fd8a08 | ||
![]() |
fe73835666 | ||
![]() |
5b4b7e2f55 | ||
![]() |
8ae2cdfce9 | ||
![]() |
6685ae063f | ||
![]() |
e2b85ccde3 | ||
![]() |
7b358a57ac | ||
![]() |
5d88030bd1 | ||
![]() |
8872653ef6 | ||
![]() |
4d4512cd72 | ||
![]() |
bc098794ee | ||
![]() |
788da901ee | ||
![]() |
2a40112f09 | ||
![]() |
61b7932e82 | ||
![]() |
f024a4992a | ||
![]() |
d38747d951 | ||
![]() |
18070e5381 | ||
![]() |
d913323ca9 | ||
![]() |
9230f2fff1 | ||
![]() |
86bdf6e1d4 | ||
![]() |
1a628fff51 | ||
![]() |
bd33bd770d | ||
![]() |
b8433e9261 | ||
![]() |
5a424f60da | ||
![]() |
444308ccde | ||
![]() |
1ad536eeed | ||
![]() |
c68ae1a9f5 | ||
![]() |
df7ea9e7b4 | ||
![]() |
34824abe0d | ||
![]() |
ae00c100ac | ||
![]() |
61d1c864c5 | ||
![]() |
8d25044ce5 | ||
![]() |
c3c719b978 | ||
![]() |
9ee3760493 | ||
![]() |
344185b1bd | ||
![]() |
fcf61e9e02 | ||
![]() |
9f236c4b91 | ||
![]() |
00249f3c80 | ||
![]() |
925b4de298 | ||
![]() |
48ea69d778 | ||
![]() |
80d0613bf2 | ||
![]() |
4ab688c5e8 | ||
![]() |
2e93129877 | ||
![]() |
94148c37f5 | ||
![]() |
f25be28ab8 | ||
![]() |
fae7bd1bb7 | ||
![]() |
0556aa1901 | ||
![]() |
48698f14a2 | ||
![]() |
8e6db769ac | ||
![]() |
8a041373bb | ||
![]() |
37c8699f34 | ||
![]() |
788b3002d8 | ||
![]() |
beb9f65dc8 | ||
![]() |
62865f7e19 | ||
![]() |
a7dda1b28c | ||
![]() |
cba5a2579f | ||
![]() |
a2479bb906 | ||
![]() |
17589534d0 | ||
![]() |
ea26fd2840 | ||
![]() |
45d3e6aa91 | ||
![]() |
0bd3fb88b2 | ||
![]() |
c34b91d8dd | ||
![]() |
56da86b4f4 | ||
![]() |
ea8a2bf1fc | ||
![]() |
1b349b05d5 | ||
![]() |
4c5b439992 | ||
![]() |
86cd2da8d5 | ||
![]() |
9b1fee8995 | ||
![]() |
2798a12444 | ||
![]() |
02182143c3 | ||
![]() |
b5faf3055b | ||
![]() |
cccd8fc957 | ||
![]() |
eccbd97e1f | ||
![]() |
ec5ab4fcd1 | ||
![]() |
13a5358a3d | ||
![]() |
99db111bca | ||
![]() |
27b9d32bf2 | ||
![]() |
0985d69cc6 | ||
![]() |
d0977258ee | ||
![]() |
2cebfc54f5 | ||
![]() |
de3e5fa77c | ||
![]() |
b9006acee3 | ||
![]() |
51231ac8d4 | ||
![]() |
84ed46d4c1 | ||
![]() |
849f85a05c | ||
![]() |
e8e0351985 | ||
![]() |
131364def1 | ||
![]() |
bcb45da1b4 | ||
![]() |
08f9d31d60 | ||
![]() |
37609d6a4f | ||
![]() |
33c2d5e4e2 | ||
![]() |
a98bbc8e0b | ||
![]() |
9f74c0ff07 | ||
![]() |
e5cdd61fe3 | ||
![]() |
e3a2a6c44d | ||
![]() |
aad92ceafe | ||
![]() |
4102e8fdfe | ||
![]() |
f8f8a9a041 | ||
![]() |
04b947cdc3 | ||
![]() |
be2e611680 | ||
![]() |
41f75b6974 | ||
![]() |
e009ccbe66 | ||
![]() |
46d43dc09c | ||
![]() |
44698e44e8 | ||
![]() |
0ff33777fe | ||
![]() |
1dc93286a0 | ||
![]() |
2bacb8210b | ||
![]() |
3b65f4e38d | ||
![]() |
6ac5a82eec | ||
![]() |
086cf3a272 | ||
![]() |
8d01be7bbd | ||
![]() |
eb86d234f8 | ||
![]() |
3af0ece2bc | ||
![]() |
a9ffbdea3f | ||
![]() |
6dc5471a75 | ||
![]() |
309122017e | ||
![]() |
8f530eb315 | ||
![]() |
d56341c77b | ||
![]() |
212d99146d | ||
![]() |
e2f09213bc | ||
![]() |
c8b12af1d2 | ||
![]() |
a919e02ba1 | ||
![]() |
b081cfb628 | ||
![]() |
dd4c60cf39 | ||
![]() |
4828bae8d3 | ||
![]() |
cd38e9580e | ||
![]() |
aeebde4642 | ||
![]() |
298158501d | ||
![]() |
904c8a4375 | ||
![]() |
b86e33ef49 | ||
![]() |
0a3d8d60d3 | ||
![]() |
08d49a8fa0 | ||
![]() |
8f5cbe51a7 | ||
![]() |
bd0de15d31 | ||
![]() |
fcdb5cf8dd | ||
![]() |
7db8481500 | ||
![]() |
74514b8c23 | ||
![]() |
c74115f25c | ||
![]() |
672a167963 | ||
![]() |
139f5961a0 | ||
![]() |
5258fb7f7c | ||
![]() |
15dfdaac82 | ||
![]() |
bb8d207efa | ||
![]() |
e03d8eb728 | ||
![]() |
a95d3e05e7 | ||
![]() |
646a97de5f | ||
![]() |
8e60fac73b | ||
![]() |
5e775a3fae | ||
![]() |
69ce65bacb | ||
![]() |
bf8e03c466 | ||
![]() |
1254d315b9 | ||
![]() |
4ec19c0332 | ||
![]() |
61a6691b36 | ||
![]() |
78c8212280 | ||
![]() |
adc8d4f6c8 | ||
![]() |
24183b1a91 | ||
![]() |
888c524683 | ||
![]() |
ae0af66d50 | ||
![]() |
a8ecde2553 | ||
![]() |
fef10f590b | ||
![]() |
771e539c18 | ||
![]() |
313881d0c1 | ||
![]() |
3bd973037a | ||
![]() |
f494023b0d | ||
![]() |
659d126460 | ||
![]() |
76dcb08266 | ||
![]() |
4cb2edf020 | ||
![]() |
720eb874a9 | ||
![]() |
fa15eb1698 | ||
![]() |
b54e664a63 | ||
![]() |
7adc4b8e99 | ||
![]() |
5021977bb1 | ||
![]() |
5115756b79 | ||
![]() |
f6ac0d89ae | ||
![]() |
11240376a5 | ||
![]() |
e377f4ea47 | ||
![]() |
9d3800fd15 | ||
![]() |
4f525d39d4 | ||
![]() |
7ea3864a93 | ||
![]() |
891dbd2acc | ||
![]() |
f206fda8ae | ||
![]() |
6beb0fad3f | ||
![]() |
27fd92d580 | ||
![]() |
51e5ba94b3 | ||
![]() |
b4d0a40383 | ||
![]() |
3ab00e3a11 | ||
![]() |
cde2e8a277 | ||
![]() |
528c8fc244 | ||
![]() |
7f9bce705c | ||
![]() |
ce3e41cf4c | ||
![]() |
dd6a058992 | ||
![]() |
7ed06b2189 | ||
![]() |
a14eb495b7 | ||
![]() |
0131e1e00b | ||
![]() |
8618e942e6 | ||
![]() |
2fea782efc | ||
![]() |
a2e26aad1e | ||
![]() |
b4393277ea | ||
![]() |
b33da9b8f3 | ||
![]() |
3e35857080 | ||
![]() |
b25fd8a98c | ||
![]() |
be08349dcb | ||
![]() |
3228f1b267 | ||
![]() |
a53de63ba7 | ||
![]() |
e8f512bfe7 | ||
![]() |
bb31d7b88c | ||
![]() |
7f99f7c14f | ||
![]() |
883a8fa6f1 | ||
![]() |
a7b04ce6cf | ||
![]() |
bd1b727187 | ||
![]() |
19d6f4740e | ||
![]() |
0f0f4f41b8 | ||
![]() |
221365d8ef | ||
![]() |
2c96966431 | ||
![]() |
65359ff8f7 | ||
![]() |
d0c9f4a692 | ||
![]() |
d5763937ad | ||
![]() |
25b19e08e2 | ||
![]() |
0e63fb3fa7 | ||
![]() |
3e72331896 | ||
![]() |
1438771124 | ||
![]() |
b95dfb3ffd | ||
![]() |
4b15f10fbb | ||
![]() |
628c14d656 | ||
![]() |
2cb7023e28 | ||
![]() |
69c3f96998 | ||
![]() |
5c6875d768 | ||
![]() |
a78c7b3898 | ||
![]() |
ac32d07aaf | ||
![]() |
7fce719142 | ||
![]() |
cb7e4e8679 | ||
![]() |
35452b3157 | ||
![]() |
e90d30a2cc | ||
![]() |
45ab73ac81 | ||
![]() |
78978994df | ||
![]() |
19cb29da51 | ||
![]() |
6ed3b6f85c | ||
![]() |
5b8f13a4a9 | ||
![]() |
b6e6e2e1da | ||
![]() |
7c7fc8b5c4 | ||
![]() |
1a5e08f3f6 | ||
![]() |
e051ea06fc | ||
![]() |
a7023113e7 | ||
![]() |
02e24f5d1e | ||
![]() |
13740c1bf4 | ||
![]() |
8212b730c7 | ||
![]() |
a4daa613ae | ||
![]() |
5dce3301bd | ||
![]() |
a917514546 | ||
![]() |
4dc940f59e | ||
![]() |
5facf5c15e | ||
![]() |
1e8b775a7a | ||
![]() |
0ad0fe207a | ||
![]() |
f295117fba | ||
![]() |
8ab097afb7 | ||
![]() |
84e24afd2f | ||
![]() |
f16d230530 | ||
![]() |
3a3b3225d4 | ||
![]() |
84a599ece4 | ||
![]() |
b7690a0add | ||
![]() |
18ecc2fd81 | ||
![]() |
999c11ad49 | ||
![]() |
c891b5f250 | ||
![]() |
419ff38a07 | ||
![]() |
8d8201502f | ||
![]() |
d38d153f51 | ||
![]() |
fd260404ca | ||
![]() |
a551942635 | ||
![]() |
b60d5a0a11 | ||
![]() |
fae0054d31 | ||
![]() |
73fded7515 | ||
![]() |
7630e8ffc6 | ||
![]() |
4552ad5269 | ||
![]() |
3d49e8ac84 | ||
![]() |
508ca3044d | ||
![]() |
d8f2964710 | ||
![]() |
ab00997698 | ||
![]() |
b4966aa1bd | ||
![]() |
0703fcd719 | ||
![]() |
4594583f52 | ||
![]() |
68cb1a8c2e | ||
![]() |
21493731df | ||
![]() |
950aeec3ff | ||
![]() |
1f59821270 | ||
![]() |
60a9a7f118 | ||
![]() |
8ec09e3ca4 | ||
![]() |
289a26e9e4 | ||
![]() |
3e47bc9af5 | ||
![]() |
d2a1f6aa4b | ||
![]() |
f68aa02272 | ||
![]() |
588af510a3 | ||
![]() |
9e1c25a889 | ||
![]() |
5d92198487 | ||
![]() |
20ddffca0d | ||
![]() |
25e56a5e83 | ||
![]() |
1e5a7aac87 | ||
![]() |
b5b3dd9cfd | ||
![]() |
92fba63ad8 | ||
![]() |
25d35dd6f4 | ||
![]() |
a445abc10e | ||
![]() |
1342f78b09 | ||
![]() |
a0d57a6afd | ||
![]() |
c6ae353756 | ||
![]() |
12768e7a54 | ||
![]() |
35e2dcff88 | ||
![]() |
dc89e42ef5 | ||
![]() |
4a2d74c9ab | ||
![]() |
cd48b8128e | ||
![]() |
301d4915bc | ||
![]() |
8061056cec | ||
![]() |
44926b7f9f | ||
![]() |
d11a700589 | ||
![]() |
0a26079af2 | ||
![]() |
b6e49f3920 | ||
![]() |
4123118d5a | ||
![]() |
e29d198700 | ||
![]() |
6f531a3c99 | ||
![]() |
53917fa4b8 | ||
![]() |
646218e6f4 | ||
![]() |
4185c4a44a | ||
![]() |
45b0bb5aff | ||
![]() |
c7db2f8429 | ||
![]() |
f0b86e6c26 | ||
![]() |
7871a904d7 | ||
![]() |
40e3daf560 | ||
![]() |
44b7ff02fd | ||
![]() |
35ed57e6c1 | ||
![]() |
79731a57f3 | ||
![]() |
a7f37cebdc | ||
![]() |
47b99c69cc | ||
![]() |
757f3497bc | ||
![]() |
f2455cbe33 | ||
![]() |
e3f300d323 | ||
![]() |
497edbaf3e | ||
![]() |
48326e061a | ||
![]() |
84e9dcbab0 | ||
![]() |
30b32e84fe | ||
![]() |
fb92493376 | ||
![]() |
eb4f9eac0c | ||
![]() |
d7b5dd1bbf | ||
![]() |
b18e81b631 | ||
![]() |
8ff153d7d4 | ||
![]() |
32f63abb59 | ||
![]() |
23572af942 | ||
![]() |
8d9cfa157a | ||
![]() |
58abd0777b | ||
![]() |
3ee98d9f72 | ||
![]() |
b1a5ade88f | ||
![]() |
73229249d8 | ||
![]() |
e0da56fc7b | ||
![]() |
cdaaae0cb2 | ||
![]() |
c319fb8eaa | ||
![]() |
538e612a47 | ||
![]() |
9d97004a28 | ||
![]() |
87deb43012 | ||
![]() |
a9cbb375b7 | ||
![]() |
161adbb1aa | ||
![]() |
de2fa78d92 | ||
![]() |
8bede388af | ||
![]() |
c9d166747d | ||
![]() |
56cdc2175c | ||
![]() |
de453d71cb | ||
![]() |
23b07bdf50 | ||
![]() |
9ac94339dc | ||
![]() |
46b0eef721 | ||
![]() |
d3ae351236 | ||
![]() |
4790d78c98 | ||
![]() |
c66e20ce6e | ||
![]() |
343a90dc37 | ||
![]() |
09ab0704f4 | ||
![]() |
114644cdb0 | ||
![]() |
cf9f9e1f30 | ||
![]() |
19ce256a95 | ||
![]() |
eba53f652c | ||
![]() |
d8ee498a65 | ||
![]() |
e3a1a61868 | ||
![]() |
1a2bdd9e4c | ||
![]() |
384f965fba | ||
![]() |
005340c83f | ||
![]() |
d21afce2b6 | ||
![]() |
808c291c76 | ||
![]() |
62a07596d6 | ||
![]() |
b730b64bbe | ||
![]() |
3e22fc32f3 | ||
![]() |
e65a35e964 | ||
![]() |
78d189fbf7 | ||
![]() |
8cfb910441 | ||
![]() |
039a939cb8 | ||
![]() |
d7d5f4330b | ||
![]() |
79c1222896 | ||
![]() |
a3f3a1097b | ||
![]() |
d4df626d88 | ||
![]() |
eed8a4ee6e | ||
![]() |
b1b83831d1 | ||
![]() |
8e1beae4e7 | ||
![]() |
baed0618ed | ||
![]() |
e3e181f4b3 | ||
![]() |
1f2aa4da6f | ||
![]() |
fc39146f48 | ||
![]() |
192e304b94 | ||
![]() |
1744a8d145 | ||
![]() |
b12acddf4f | ||
![]() |
ef82ef4ddb | ||
![]() |
bb20aeb9bc | ||
![]() |
e9d0b2f039 | ||
![]() |
222ecbffbb | ||
![]() |
ce736fc15b | ||
![]() |
1413a4886f | ||
![]() |
cfec819f0d | ||
![]() |
107bfdc821 | ||
![]() |
5c160921ff | ||
![]() |
fe3bef55b7 | ||
![]() |
5300f0082c | ||
![]() |
85abfd84be | ||
![]() |
005ffeaa8c | ||
![]() |
5c8c6d3c70 | ||
![]() |
7eb3932d3a | ||
![]() |
ebf2f991b5 | ||
![]() |
a451cb22f1 | ||
![]() |
82bf4eb059 | ||
![]() |
d53d58fff2 | ||
![]() |
a072180c92 | ||
![]() |
0fd9a8505a | ||
![]() |
b2482b39e4 | ||
![]() |
74c7d7131f | ||
![]() |
4dd1c31dc7 | ||
![]() |
2e13e821f8 | ||
![]() |
2478c5816b | ||
![]() |
47ad9afcf3 | ||
![]() |
67e882d4bb | ||
![]() |
25c216cbdf | ||
![]() |
f5441d2170 | ||
![]() |
0d67be3f30 | ||
![]() |
f37600ee01 | ||
![]() |
f38a9035e5 | ||
![]() |
a12d6ff257 | ||
![]() |
2205227c3b | ||
![]() |
d2d867ea36 | ||
![]() |
b232ae2f17 | ||
![]() |
53b2acc00b | ||
![]() |
01b62202b2 | ||
![]() |
b68bb560e9 | ||
![]() |
21467c76f1 | ||
![]() |
33fae67579 | ||
![]() |
864015fa3f | ||
![]() |
1d3def0cc6 | ||
![]() |
e01e8f1cb6 | ||
![]() |
186ab51137 | ||
![]() |
74be904018 | ||
![]() |
298cd9a327 | ||
![]() |
414bfe65eb | ||
![]() |
c519ba9920 | ||
![]() |
fee8ff37b3 | ||
![]() |
fee591b759 | ||
![]() |
16f94546f5 | ||
![]() |
55859c1bef | ||
![]() |
bcefdef1ea | ||
![]() |
f79d41e927 | ||
![]() |
1680ea02da | ||
![]() |
1aaf54ac24 | ||
![]() |
a5984c702a | ||
![]() |
9a82304ae9 | ||
![]() |
a26e37b746 | ||
![]() |
c2b39fdede | ||
![]() |
8349a1c0d9 | ||
![]() |
360a254be0 | ||
![]() |
ab1fcebeff | ||
![]() |
a6dd2e33c2 | ||
![]() |
9d8974d509 | ||
![]() |
037b4b76df | ||
![]() |
be97fa8ab1 | ||
![]() |
164954a788 | ||
![]() |
c1d7f6216f | ||
![]() |
7df4c12da9 | ||
![]() |
0d5de60584 | ||
![]() |
4b0f526006 | ||
![]() |
4cf65b973c | ||
![]() |
160f728530 | ||
![]() |
922540306e | ||
![]() |
d48e440a72 | ||
![]() |
0709a0f050 | ||
![]() |
097c72aa65 | ||
![]() |
7b01bb833f | ||
![]() |
cfd0bddc30 | ||
![]() |
b53b12aa5f | ||
![]() |
d0bb185cf5 | ||
![]() |
49385a98b2 | ||
![]() |
b9e6cb3e55 | ||
![]() |
dffe5a9d60 | ||
![]() |
d7eb343ea0 | ||
![]() |
bf5610a3b9 | ||
![]() |
7bce6780ca | ||
![]() |
bf121ae95f | ||
![]() |
7b6b492bdd | ||
![]() |
aa7db2c0e9 | ||
![]() |
684e50f0a4 | ||
![]() |
4a90959cb5 | ||
![]() |
9b1cf420f1 | ||
![]() |
e7e47e77a3 | ||
![]() |
695df6532e | ||
![]() |
6680b536c4 | ||
![]() |
a21a7d8b66 | ||
![]() |
c0d059cd0e | ||
![]() |
7faa3ed7d6 | ||
![]() |
c9b152fa41 | ||
![]() |
ae27571414 | ||
![]() |
5e5377a063 | ||
![]() |
884c5bcff1 | ||
![]() |
3a2fcc32cd | ||
![]() |
a8aa8c6cbc | ||
![]() |
f01b09ce84 | ||
![]() |
2419a701d8 | ||
![]() |
110be707c3 | ||
![]() |
b2743af0ed | ||
![]() |
76565022fb | ||
![]() |
4602cb9891 | ||
![]() |
1d7e99531a | ||
![]() |
f0a9dbe3ad | ||
![]() |
245782897b | ||
![]() |
2327b17656 | ||
![]() |
359732af85 | ||
![]() |
1dea0d91a0 | ||
![]() |
d67d077a71 | ||
![]() |
69be7a85a2 | ||
![]() |
8ec17063a6 | ||
![]() |
da4c1ebe81 | ||
![]() |
bd3a7ccb15 | ||
![]() |
edfcc2f9d5 | ||
![]() |
ee362b3bd2 | ||
![]() |
67bd1bf34f | ||
![]() |
9f3af061cf | ||
![]() |
88c3d4896a | ||
![]() |
7b6ef3bc8e | ||
![]() |
fbaa751da8 | ||
![]() |
06b6327875 | ||
![]() |
0d9740b9fa | ||
![]() |
e9be3334d1 | ||
![]() |
0ae74ceaed | ||
![]() |
17ffda1c8a | ||
![]() |
0de11ead36 | ||
![]() |
9d486db460 | ||
![]() |
257fe922d2 | ||
![]() |
1068f88377 | ||
![]() |
9e7360e5fa | ||
![]() |
273d4bdd32 | ||
![]() |
27d244dfae | ||
![]() |
a39a1a5273 | ||
![]() |
ef392e7d37 | ||
![]() |
c38751191f | ||
![]() |
5cbdcf4f0d | ||
![]() |
3641e51109 | ||
![]() |
3f46e93ccc |
4
.clang_complete
Normal file
4
.clang_complete
Normal file
@@ -0,0 +1,4 @@
|
||||
-I./src
|
||||
-I./src/ipaddr
|
||||
-I./src/portab
|
||||
-I./src/tool
|
@@ -1,20 +1,20 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2016 Alexander Barton (alex@barton.de) and Contributors.
|
||||
#
|
||||
# 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.
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
#
|
||||
|
||||
EXTRA_DIST = \
|
||||
README \
|
||||
0001-Revert-Removed-ngircd.patch \
|
||||
0002-ngircd-whitespace-fixes.patch
|
||||
# .editorconfig: Editor settings, see <http://editorconfig.org>.
|
||||
|
||||
maintainer-clean-local:
|
||||
rm -f Makefile Makefile.in
|
||||
root = true
|
||||
|
||||
# -eof-
|
||||
[*]
|
||||
indent_style = tab
|
||||
indent_size = 8
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
59
.gitignore
vendored
59
.gitignore
vendored
@@ -1,21 +1,80 @@
|
||||
Makefile
|
||||
Makefile.am
|
||||
Makefile.in
|
||||
aclocal.m4
|
||||
ansi2knr.1
|
||||
ansi2knr.c
|
||||
ansi2knr.h
|
||||
ar-lib
|
||||
autom4te.cache
|
||||
build-stamp-ngircd*
|
||||
build+*
|
||||
compile
|
||||
config.cache
|
||||
config.log
|
||||
config.status
|
||||
configure
|
||||
configure.ac
|
||||
configure.lineno
|
||||
cov-int
|
||||
cscope.out
|
||||
debian
|
||||
depcomp
|
||||
install-sh
|
||||
missing
|
||||
ngircd.dest
|
||||
.*.swp
|
||||
.deps
|
||||
.vscode
|
||||
*.a
|
||||
*.o
|
||||
doc/sample-ngircd.conf
|
||||
doc/src/html
|
||||
man/ngircd.8
|
||||
man/ngircd.conf.5
|
||||
src/config.h
|
||||
src/config.h.in
|
||||
src/config.h.in~
|
||||
src/stamp-h1
|
||||
src/ngircd/check-help
|
||||
src/ngircd/check-version
|
||||
src/ngircd/ngircd
|
||||
src/ngircd/ngircd.exe
|
||||
src/portab/portabtest
|
||||
src/portab/portabtest.exe
|
||||
src/testsuite/*.e_
|
||||
src/testsuite/channel-test
|
||||
src/testsuite/connect-ssl-cert1-test
|
||||
src/testsuite/connect-ssl-cert2-test
|
||||
src/testsuite/connect-test
|
||||
src/testsuite/connect-tls-cert1-test
|
||||
src/testsuite/connect-tls-cert2-test
|
||||
src/testsuite/invite-test
|
||||
src/testsuite/join-test
|
||||
src/testsuite/kick-test
|
||||
src/testsuite/logs
|
||||
src/testsuite/message-test
|
||||
src/testsuite/misc-test
|
||||
src/testsuite/mode-test
|
||||
src/testsuite/ngircd-test1.log
|
||||
src/testsuite/ngircd-test1.motd
|
||||
src/testsuite/ngircd-test2.log
|
||||
src/testsuite/ngircd-test2.motd
|
||||
src/testsuite/ngircd-test3.log
|
||||
src/testsuite/ngircd-test3.motd
|
||||
src/testsuite/opless-channel-test
|
||||
src/testsuite/server-link-test
|
||||
src/testsuite/server-login-test
|
||||
src/testsuite/ssl/cert.pem
|
||||
src/testsuite/ssl/dhparams.pem
|
||||
src/testsuite/ssl/key.pem
|
||||
src/testsuite/T-ngircd1
|
||||
src/testsuite/T-ngircd1.exe
|
||||
src/testsuite/T-ngircd2
|
||||
src/testsuite/T-ngircd2.exe
|
||||
src/testsuite/T-ngircd3
|
||||
src/testsuite/T-ngircd3.exe
|
||||
src/testsuite/tests
|
||||
src/testsuite/tests-skipped.lst
|
||||
src/testsuite/who-test
|
||||
src/testsuite/whois-test
|
||||
|
20
.mailmap
20
.mailmap
@@ -1,4 +1,22 @@
|
||||
# mailmap file for git-[short]log and git-blame
|
||||
# use "git shortlog -se" to see the list of all authors.
|
||||
|
||||
Alexander Barton <alex@barton.de> <anonymous>
|
||||
Alexander Barton <alex@barton.de> <alex@kfreebsd.barton.de>
|
||||
|
||||
Alexander Barton <anonymous>
|
||||
Ali Shemiran <ashemira@ucsd.edu>
|
||||
|
||||
Christoph Biedl <ngircd.anoy@manchmal.in-ulm.de> <debian.axhn@manchmal.in-ulm.de>
|
||||
|
||||
Dana Dahlstrom <dana+ngIRCd@cs.ucsd.edu> <dana@cs.ucsd.edu>
|
||||
Dana Dahlstrom <dana+ngIRCd@cs.ucsd.edu> <dana+70@cs.ucsd.edu>
|
||||
|
||||
DNS <dns@rbose.org>
|
||||
|
||||
Götz Hoffart <goetz@hoffart.de>
|
||||
|
||||
LucentW <lucent@zebes.info> <LucentW@users.noreply.github.com>
|
||||
|
||||
Michi <michi+ngircd@dataswamp.org>
|
||||
|
||||
Sam James <sam@cmpct.info> <11667869+thesamesam@users.noreply.github.com>
|
||||
|
15
.travis.yml
Normal file
15
.travis.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
language: c
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libident-dev
|
||||
- libpam0g-dev
|
||||
- libssl-dev
|
||||
- libwrap0-dev
|
||||
- zlib1g-dev
|
||||
- expect
|
||||
- telnet
|
||||
compiler:
|
||||
- gcc
|
||||
- clang
|
||||
script: ./autogen.sh && ./configure --enable-ipv6 --with-iconv --with-ident --with-openssl --with-pam --with-tcp-wrappers --with-zlib && make check
|
77
AUTHORS
77
AUTHORS
@@ -2,45 +2,80 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2012 Alexander Barton and Contributors.
|
||||
(c)2001-2020 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- AUTHORS and CONTRIBUTORS --
|
||||
|
||||
|
||||
Note: If you have critics, patches or something else, please feel free to
|
||||
post a mail to the ngIRCd mailing list: <ngircd-ml@arthur.barton.de> (please
|
||||
see <http://ngircd.barton.de/#ml> for details).
|
||||
Note:
|
||||
If you have comments, patches or something else, please feel free to post
|
||||
a mail to the ngIRCd mailing list: <ngircd-ml@ngircd.barton.de> (please see
|
||||
<http://ngircd.barton.de/support.php> for details) or join the ngIRCd IRC
|
||||
channel "#ngircd" on irc.barton.de: <irc://irc.barton.de/ngircd>.
|
||||
|
||||
Don't mail the people listed here directly, if possible!
|
||||
|
||||
|
||||
Main Authors
|
||||
~~~~~~~~~~~~
|
||||
Alexander Barton, <alex@barton.de> (alex)
|
||||
Florian Westphal, <fw@strlen.de>
|
||||
Alexander Barton <alex@barton.de>
|
||||
Florian Westphal <fw@strlen.de>
|
||||
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
Ali Shemiran, <ashemira@ucsd.edu>
|
||||
Ask Bjørn Hansen, <ask@develooper.com>
|
||||
Benjamin Pineau, <ben@zouh.org>
|
||||
Brandon Beresini, <beresini@google.com>
|
||||
Bryan Caldwell, <bcaldwel@ucsd.edu>
|
||||
Dana Dahlstrom, <dana+ngIRCd@cs.ucsd.edu>
|
||||
Eric Grunow, <egrunow@ucsd.edu>
|
||||
Goetz Hoffart, <goetz@hoffart.de>
|
||||
Ilja Osthoff, <i.osthoff@gmx.net>
|
||||
Jari Aalto, <jari.aalto@cante.net>
|
||||
Rolf Eike Beer, <eike@sf-mail.de>
|
||||
Scott Perry, <scperry@ucsd.edu>
|
||||
Sean Reifschneider, <jafo-rpms@tummy.com>
|
||||
Ali Shemiran <ashemira@ucsd.edu>
|
||||
Ask Bjørn Hansen <ask@develooper.com>
|
||||
Benjamin Pineau <ben@zouh.org>
|
||||
Bernd Kuhls <bernd.kuhls@t-online.de>
|
||||
Brandon Beresini <beresini@google.com>
|
||||
Brett Smith <brett@w3.org>
|
||||
Brian Collins <bricollins@gmail.com>
|
||||
Bryan Caldwell <bcaldwel@ucsd.edu>
|
||||
Christian Aistleitner <christian@quelltextlich.at>
|
||||
Christoph Biedl <ngircd.anoy@manchmal.in-ulm.de>
|
||||
Dana Dahlstrom <dana+ngIRCd@cs.ucsd.edu>
|
||||
David Kingston <deathking1337@aim.com>
|
||||
DNS <dns@rbose.org>
|
||||
Eric Grunow <egrunow@ucsd.edu>
|
||||
Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
||||
Federico G. Schwindt <fgsch@lodoss.net>
|
||||
Gabor Adam Toth <tg@tgbit.net>
|
||||
Götz Hoffart <goetz@hoffart.de>
|
||||
Hilko Bengen <bengen@hilluzination.de>
|
||||
Ian Chard <ian@chard.org>
|
||||
Ilja Osthoff <i.osthoff@gmx.net>
|
||||
ItsOnlyBinary <ItsOnlyBinary@users.noreply.github.com>
|
||||
James Lu <james@overdrivenetworks.com>
|
||||
Jari Aalto <jari.aalto@cante.net>
|
||||
Johann Hartwig Hauschild <git@hauschild.it>
|
||||
JRMU <jrmu@lecturify.com>
|
||||
LucentW <lucent@zebes.info>
|
||||
Mantas Mikulėnas <grawity@gmail.com>
|
||||
Michi <michi+ngircd@dataswamp.org>
|
||||
Neale Pickett <neale@woozle.org>
|
||||
Peter Powell <petpow@saberuk.com>
|
||||
Rolf Eike Beer <eike@sf-mail.de>
|
||||
Rosen Penev <rosenp@gmail.com>
|
||||
Roy Sindre Norangshol <roy.sindre@norangshol.no>
|
||||
Sam James <sam@cmpct.info>
|
||||
Scott Perry <scperry@ucsd.edu>
|
||||
Sean Reifschneider <jafo-rpms@tummy.com>
|
||||
Sebastian Köhler <sebkoehler@whoami.org.uk>
|
||||
shankari <shankari@eecs.berkeley.edu>
|
||||
Tassilo Schweyer <dev@welterde.de>
|
||||
Tom Ryder <tom@sanctum.geek.nz>
|
||||
Unit 193 <unit193@ubuntu.com>
|
||||
William Pitcock <nenolod@dereferenced.org>
|
||||
Windree <57554809+Windree@users.noreply.github.com>
|
||||
xor <xorboy@gmail.com>
|
||||
Yecheng Fu <cofyc.jackson@gmail.com>
|
||||
|
||||
|
||||
Code snippets
|
||||
~~~~~~~~~~~~~
|
||||
J. Kercheval: pattern matching functions
|
||||
Patrick Powell, <papowell@astart.com>: snprintf()-function
|
||||
Andrew Tridgell & Martin Pool: strl{cpy|cat}()-functions
|
||||
John Kercheval: pattern matching functions
|
||||
Patrick Powell <papowell@astart.com>: snprintf()-function
|
||||
|
302
INSTALL
302
INSTALL
@@ -1,302 +0,0 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2012 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- INSTALL --
|
||||
|
||||
|
||||
I. Upgrade Information
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Differences to version 17
|
||||
|
||||
- Support for ZeroConf/Bonjour/Rendezvous service registration has been
|
||||
removed. The configuration option "NoZeroconf" is no longer available.
|
||||
|
||||
- The structure of ngircd.conf has been cleaned up and three new configuration
|
||||
sections have been introduced: [Limits], [Options], and [SSL].
|
||||
Lots of configuration variables stored in the [Global] section are now
|
||||
deprecated there and should be stored in one of these new sections (but
|
||||
still work in [Global]):
|
||||
"AllowRemoteOper" -> [Options]
|
||||
"ChrootDir" -> [Options]
|
||||
"ConnectIPv4" -> [Options]
|
||||
"ConnectIPv6" -> [Options]
|
||||
"ConnectRetry" -> [Limits]
|
||||
"MaxConnections" -> [Limits]
|
||||
"MaxConnectionsIP" -> [Limits]
|
||||
"MaxJoins" -> [Limits]
|
||||
"MaxNickLength" -> [Limits]
|
||||
"NoDNS" -> [Options], and renamed to "DNS"
|
||||
"NoIdent" -> [Options], and renamed to "Ident"
|
||||
"NoPAM" -> [Options], and renamed to "PAM"
|
||||
"OperCanUseMode" -> [Options]
|
||||
"OperServerMode" -> [Options]
|
||||
"PingTimeout" -> [Limits]
|
||||
"PongTimeout" -> [Limits]
|
||||
"PredefChannelsOnly" -> [Options]
|
||||
"SSLCertFile" -> [SSL], and renamed to "CertFile"
|
||||
"SSLDHFile" -> [SSL], and renamed to "DHFile"
|
||||
"SSLKeyFile" -> [SSL], and renamed to "KeyFile"
|
||||
"SSLKeyFilePassword" -> [SSL], and renamed to "KeyFilePassword"
|
||||
"SSLPorts" -> [SSL], and renamed to "Ports"
|
||||
"SyslogFacility" -> [Options]
|
||||
"WebircPassword" -> [Options]
|
||||
You should adjust your ngircd.conf and run "ngircd --configtest" to make
|
||||
sure that your settings are correct and up to date!
|
||||
|
||||
Differences to version 16
|
||||
|
||||
- Changes to the "MotdFile" specified in ngircd.conf now require a ngircd
|
||||
configuration reload to take effect (HUP signal, REHASH command).
|
||||
|
||||
Differences to version 0.9.x
|
||||
|
||||
- The option of the configure script to enable support for Zeroconf/Bonjour/
|
||||
Rendezvous/WhateverItIsNamedToday has been renamed:
|
||||
--with-rendezvous -> --with-zeroconf
|
||||
|
||||
Differences to version 0.8.x
|
||||
|
||||
- The maximum length of passwords has been raised to 20 characters (instead
|
||||
of 8 characters). If your passwords are longer than 8 characters then they
|
||||
are cut at an other position now.
|
||||
|
||||
Differences to version 0.6.x
|
||||
|
||||
- Some options of the configure script have been renamed:
|
||||
--disable-syslog -> --without-syslog
|
||||
--disable-zlib -> --without-zlib
|
||||
Please call "./configure --help" to review the full list of options!
|
||||
|
||||
Differences to version 0.5.x
|
||||
|
||||
- Starting with version 0.6.0, other servers are identified using asynchronous
|
||||
passwords: therefore the variable "Password" in [Server]-sections has been
|
||||
replaced by "MyPassword" and "PeerPassword".
|
||||
|
||||
- New configuration variables, section [Global]: MaxConnections, MaxJoins
|
||||
(see example configuration file "doc/sample-ngircd.conf"!).
|
||||
|
||||
|
||||
II. Standard Installation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
ngIRCd is developed for UNIX-based systems, which means that the installation
|
||||
on modern UNIX-like systems that are supported by GNU autoconf and GNU
|
||||
automake ("configure") should be no problem.
|
||||
|
||||
The normal installation procedure after getting (and expanding) the source
|
||||
files (using a distribution archive or GIT) is as following:
|
||||
|
||||
1) ./autogen.sh [only necessary when using GIT]
|
||||
2) ./configure
|
||||
3) make
|
||||
4) make install
|
||||
|
||||
(Please see details below!)
|
||||
|
||||
Now the newly compiled executable "ngircd" is installed in its standard
|
||||
location, /usr/local/sbin/.
|
||||
|
||||
The next step is to configure and afterwards starting the daemon. Please
|
||||
have a look at the ngircd(8) and ngircd.conf(5) manual pages for details
|
||||
and all possible options -- and don't forget to run "ngircd --configtest"
|
||||
to validate your configuration file!
|
||||
|
||||
If no previous version of the configuration file exists (the standard name
|
||||
is /usr/local/etc/ngircd.conf), a sample configuration file containing all
|
||||
possible options will be installed there. You'll find its template in the
|
||||
doc/ directory: sample-ngircd.conf.
|
||||
|
||||
|
||||
1): "autogen.sh"
|
||||
|
||||
The first step, autogen.sh, is only necessary if the configure-script isn't
|
||||
already generated. This never happens in official ("stable") releases in
|
||||
tar.gz-archives, but when using GIT.
|
||||
|
||||
This step is therefore only interesting for developers.
|
||||
|
||||
autogen.sh produces the Makefile.in's, which are necessary for the configure
|
||||
script itself, and some more files for make. To run autogen.sh you'll need
|
||||
GNU autoconf and GNU automake (use recent versions! autoconf 2.53 and
|
||||
automake 1.6.1 are known to work).
|
||||
|
||||
Again: "end users" do not need this step!
|
||||
|
||||
|
||||
2): "./configure"
|
||||
|
||||
The configure-script is used to detect local system dependencies.
|
||||
|
||||
In the perfect case, configure should recognize all needed libraries, header
|
||||
files and so on. If this shouldn't work, "./configure --help" shows all
|
||||
possible options.
|
||||
|
||||
In addition, you can pass some command line options to "configure" to enable
|
||||
and/or disable some features of ngIRCd. All these options are shown using
|
||||
"./configure --help", too.
|
||||
|
||||
Compiling a static binary will avoid you the hassle of feeding a chroot dir
|
||||
(if you want use the chroot feature). Just do something like:
|
||||
CFLAGS=-static ./configure [--your-options ...]
|
||||
Then you can use a void directory as ChrootDir (like OpenSSH's /var/empty).
|
||||
|
||||
|
||||
3): "make"
|
||||
|
||||
The make command uses the Makefiles produced by configure and compiles the
|
||||
ngIRCd daemon.
|
||||
|
||||
|
||||
4): "make install"
|
||||
|
||||
Use "make install" to install the server and a sample configuration file on
|
||||
the local system. Normally, root privileges are necessary to complete this
|
||||
step. If there is already an older configuration file present, it won't be
|
||||
overwritten.
|
||||
|
||||
These files and folders will be installed by default:
|
||||
|
||||
- /usr/local/sbin/ngircd: executable server
|
||||
- /usr/local/etc/ngircd.conf: sample configuration (if not already present)
|
||||
- /usr/local/share/doc/ngircd/: documentation
|
||||
- /usr/local/share/man/: manual pages
|
||||
|
||||
|
||||
III. Additional features
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The following optional features can be compiled into the daemon by passing
|
||||
options to the "configure" script. Most options can handle a <path> argument
|
||||
which will be used to search for the required libraries and header files in
|
||||
the given paths ("<path>/lib/...", "<path>/include/...") in addition to the
|
||||
standard locations.
|
||||
|
||||
* Syslog Logging (autodetected by default):
|
||||
--with-syslog[=<path>] / --without-syslog
|
||||
|
||||
Enable (disable) support for logging to "syslog", which should be
|
||||
available on most modern UNIX-like operating systems by default.
|
||||
|
||||
* ZLib Compression (autodetected by default):
|
||||
--with-zlib[=<path>] / --without-zlib
|
||||
|
||||
Enable (disable) support for compressed server-server links.
|
||||
The Z compression library ("libz") is required for this option.
|
||||
|
||||
* IO Backend (autodetected by default):
|
||||
--with-select[=<path>] / --without-select
|
||||
--with-poll[=<path>] / --without-poll
|
||||
--with-devpoll[=<path>] / --without-devpoll
|
||||
--with-epoll[=<path>] / --without-epoll
|
||||
--with-kqueue[=<path>] / --without-kqueue
|
||||
|
||||
ngIRCd can use different IO "backends": the "old school" select() and poll()
|
||||
API which should be supported by most UNIX-like operating systems, or the
|
||||
more efficient and flexible epoll() (Linux >=2.6), kqueue() (BSD) and
|
||||
/dev/poll APIs.
|
||||
By default the IO backend is autodetected, but you can use "--without-xxx"
|
||||
to disable a more enhanced API.
|
||||
When using the epoll() API, support for select() is compiled in as well by
|
||||
default to enable the binary to run on older Linux kernels (<2.6), too.
|
||||
|
||||
* IDENT-Support:
|
||||
--with-ident[=<path>]
|
||||
|
||||
Include support for IDENT ("AUTH") lookups. The "ident" library is
|
||||
required for this option.
|
||||
|
||||
* TCP-Wrappers:
|
||||
--with-tcp-wrappers[=<path>]
|
||||
|
||||
Include support for Wietse Venemas "TCP Wrappers" to limit client access
|
||||
to the daemon, for example by using "/etc/hosts.{allow|deny}".
|
||||
The "libwrap" is required for this option.
|
||||
|
||||
* PAM:
|
||||
--with-pam[=<path>]
|
||||
|
||||
Enable support for PAM, the Pluggable Authentication Modules library.
|
||||
See doc/PAM.txt for details.
|
||||
|
||||
* SSL:
|
||||
--with-openssl[=<path>]
|
||||
--with-gnutls[=<path>]
|
||||
|
||||
Enable support for SSL/TLS using OpenSSL or gnutls libraries.
|
||||
See doc/SSL.txt for details.
|
||||
|
||||
* IPv6:
|
||||
--enable-ipv6
|
||||
|
||||
Adds support for version 6 of the Internet Protocol.
|
||||
|
||||
|
||||
IV. Useful make-targets
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The Makefile produced by the configure-script contains always these useful
|
||||
targets:
|
||||
|
||||
- clean: delete every product from the compiler/linker
|
||||
next step: -> make
|
||||
|
||||
- distclean: the above plus erase all generated Makefiles
|
||||
next step: -> ./configure
|
||||
|
||||
- maintainer-clean: erase all automatic generated files
|
||||
next step: -> ./autogen.sh
|
||||
|
||||
|
||||
V. Sample configuration file ngircd.conf
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In the sample configuration file, there are comments beginning with "#" OR
|
||||
";" -- this is only for the better understanding of the file.
|
||||
|
||||
The file is separated in five blocks: [Global], [Features], [Operator],
|
||||
[Server], and [Channel].
|
||||
|
||||
In the [Global] section, there is the main configuration like the server
|
||||
name and the ports, on which the server should be listening. Options in
|
||||
the [Features] section enable or disable functionality in the daemon.
|
||||
IRC operators of this server are defined in [Operator] blocks, remote
|
||||
servers are configured in [Server] sections, and [Channel] blocks are
|
||||
used to configure pre-defined ("persistent") IRC channels.
|
||||
|
||||
The meaning of the variables in the configuration file is explained in the
|
||||
"doc/sample-ngircd.conf", which is used as sample configuration file in
|
||||
/usr/local/etc after running "make install" (if you don't already have one)
|
||||
and in the ngircd.conf(5) manual page.
|
||||
|
||||
|
||||
VI. Command line options
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
These parameters could be passed to the ngIRCd:
|
||||
|
||||
-f, --config <file>
|
||||
The daemon uses the file <file> as configuration file rather than
|
||||
the standard configuration /usr/local/etc/ngircd.conf.
|
||||
|
||||
-n, --nodaemon
|
||||
ngIRCd should be running as a foreground process.
|
||||
|
||||
-p, --passive
|
||||
Server-links won't be automatically established.
|
||||
|
||||
-t, --configtest
|
||||
Reads, validates and dumps the configuration file as interpreted
|
||||
by the server. Then exits.
|
||||
|
||||
Use "--help" to see a short help text describing all available parameters
|
||||
the server understands, with "--version" the ngIRCd shows its version
|
||||
number. In both cases the server exits after the output.
|
||||
|
||||
Please see the ngircd(8) manual page for complete details!
|
419
INSTALL.md
Normal file
419
INSTALL.md
Normal file
@@ -0,0 +1,419 @@
|
||||
# [ngIRCd](https://ngircd.barton.de) - Internet Relay Chat Server
|
||||
|
||||
This document explains how to install ngIRCd, the lightweight Internet Relay
|
||||
Chat (IRC) server.
|
||||
|
||||
The first section lists noteworthy changes to earlier releases; you definitely
|
||||
should read this when upgrading your setup! But you can skip over this section
|
||||
when you do a fresh installation.
|
||||
|
||||
All the subsequent sections describe the steps required to install and
|
||||
configure ngIRCd.
|
||||
|
||||
## Upgrade Information
|
||||
|
||||
Differences to version 25
|
||||
|
||||
- **Attention**:
|
||||
All already deprecated legacy options (besides the newly deprecated *Key* and
|
||||
*MaxUsers* settings, see below) were removed in ngIRCd 26, so make sure to
|
||||
update your configuration before upgrading, if you haven't done so already
|
||||
(you got a warning on daemon startup when using deprecated options): you can
|
||||
check your configuration using `ngircd --configtest` -- which is a good idea
|
||||
anyway ;-)
|
||||
|
||||
- Setting modes for predefined channels in *[Channel]* sections has been
|
||||
enhanced: now you can set *all* modes, like in IRC "MODE" commands, and have
|
||||
this setting multiple times per *[Channel]* block. Modifying lists (ban list,
|
||||
invite list, exception list) is supported, too.
|
||||
|
||||
Both the *Key* and *MaxUsers* settings are now deprecated and should be
|
||||
replaced by `Modes = +l <limit>` and `Modes = +k <key>` respectively.
|
||||
|
||||
Differences to version 22.x
|
||||
|
||||
- The *NoticeAuth* `ngircd.conf` configuration variable has been renamed to
|
||||
*NoticeBeforeRegistration*. The old *NoticeAuth* variable still works but
|
||||
is deprecated now.
|
||||
|
||||
- The default value of the SSL *CipherList* variable has been changed to
|
||||
"HIGH:!aNULL:@STRENGTH:!SSLv3" (OpenSSL) and "SECURE128:-VERS-SSL3.0"
|
||||
(GnuTLS) to disable the old SSLv3 protocol by default.
|
||||
|
||||
To enable connections of clients still requiring the weak SSLv3 protocol,
|
||||
the *CipherList* must be set to its old value (not recommended!), which
|
||||
was "HIGH:!aNULL:@STRENGTH" (OpenSSL) and "SECURE128" (GnuTLS), see below.
|
||||
|
||||
Differences to version 20.x
|
||||
|
||||
- Starting with ngIRCd 21, the ciphers used by SSL are configurable and
|
||||
default to "HIGH:!aNULL:@STRENGTH" (OpenSSL) or "SECURE128" (GnuTLS).
|
||||
Previous version were using the OpenSSL or GnuTLS defaults, "DEFAULT"
|
||||
and "NORMAL" respectively.
|
||||
|
||||
- When adding GLINE's or KLINE's to ngIRCd 21 (or newer), all clients matching
|
||||
the new mask will be KILL'ed. This was not the case with earlier versions
|
||||
that only added the mask but didn't kill already connected users.
|
||||
|
||||
- The *PredefChannelsOnly* configuration variable has been superseded by the
|
||||
new *AllowedChannelTypes* variable. It is still supported and translated to
|
||||
the appropriate *AllowedChannelTypes* setting but is deprecated now.
|
||||
|
||||
Differences to version 19.x
|
||||
|
||||
- Starting with ngIRCd 20, users can "cloak" their hostname only when the
|
||||
configuration variable *CloakHostModeX* (introduced in 19.2) is set.
|
||||
Otherwise, only IRC operators, other servers, and services are allowed to
|
||||
set mode +x. This prevents regular users from changing their hostmask to
|
||||
the name of the IRC server itself, which confused quite a few people ;-)
|
||||
|
||||
Differences to version 17.x
|
||||
|
||||
- Support for ZeroConf/Bonjour/Rendezvous service registration has been
|
||||
removed. The configuration option *NoZeroconf* is no longer available.
|
||||
|
||||
- The structure of `ngircd.conf` has been cleaned up and three new configuration
|
||||
sections have been introduced: *[Limits]*, *[Options]*, and *[SSL]*.
|
||||
|
||||
Lots of configuration variables stored in the *[Global]* section are now
|
||||
deprecated there and should be stored in one of these new sections (but
|
||||
still work in *[Global]*):
|
||||
|
||||
- *AllowRemoteOper* -> [Options]
|
||||
- *ChrootDir* -> [Options]
|
||||
- *ConnectIPv4* -> [Options]
|
||||
- *ConnectIPv6* -> [Options]
|
||||
- *ConnectRetry* -> [Limits]
|
||||
- *MaxConnections* -> [Limits]
|
||||
- *MaxConnectionsIP* -> [Limits]
|
||||
- *MaxJoins* -> [Limits]
|
||||
- *MaxNickLength* -> [Limits]
|
||||
- *NoDNS* -> [Options], and renamed to *DNS*
|
||||
- *NoIdent* -> [Options], and renamed to *Ident*
|
||||
- *NoPAM* -> [Options], and renamed to *PAM*
|
||||
- *OperCanUseMode* -> [Options]
|
||||
- *OperServerMode* -> [Options]
|
||||
- *PingTimeout* -> [Limits]
|
||||
- *PongTimeout* -> [Limits]
|
||||
- *PredefChannelsOnly* -> [Options]
|
||||
- *SSLCertFile* -> [SSL], and renamed to *CertFile*
|
||||
- *SSLDHFile* -> [SSL], and renamed to *DHFile*
|
||||
- *SSLKeyFile* -> [SSL], and renamed to *KeyFile*
|
||||
- *SSLKeyFilePassword* -> [SSL], and renamed to *KeyFilePassword*
|
||||
- *SSLPorts* -> [SSL], and renamed to *Ports*
|
||||
- *SyslogFacility* -> [Options]
|
||||
- *WebircPassword* -> [Options]
|
||||
|
||||
You should adjust your `ngircd.conf` and run `ngircd --configtest` to make
|
||||
sure that your settings are correct and up to date!
|
||||
|
||||
Differences to version 16.x
|
||||
|
||||
- Changes to the *MotdFile* specified in `ngircd.conf` now require a ngIRCd
|
||||
configuration reload to take effect (HUP signal, *REHASH* command).
|
||||
|
||||
Differences to version 0.9.x
|
||||
|
||||
- The option of the configure script to enable support for Zeroconf/Bonjour/
|
||||
Rendezvous/WhateverItIsNamedToday has been renamed:
|
||||
|
||||
- `--with-rendezvous` -> `--with-zeroconf`
|
||||
|
||||
Differences to version 0.8.x
|
||||
|
||||
- The maximum length of passwords has been raised to 20 characters (instead
|
||||
of 8 characters). If your passwords are longer than 8 characters then they
|
||||
are cut at an other position now.
|
||||
|
||||
Differences to version 0.6.x
|
||||
|
||||
- Some options of the configure script have been renamed:
|
||||
|
||||
- `--disable-syslog` -> `--without-syslog`
|
||||
- `--disable-zlib` -> `--without-zlib`
|
||||
|
||||
Please call `./configure --help` to review the full list of options!
|
||||
|
||||
Differences to version 0.5.x
|
||||
|
||||
- Starting with version 0.6.0, other servers are identified using asynchronous
|
||||
passwords: therefore the variable *Password* in *[Server]*-sections has been
|
||||
replaced by *MyPassword* and *PeerPassword*.
|
||||
|
||||
- New configuration variables, section *[Global]*: *MaxConnections*, *MaxJoins*
|
||||
(see example configuration file `doc/sample-ngircd.conf`!).
|
||||
|
||||
## Standard Installation
|
||||
|
||||
*Note*: This sections describes installing ngIRCd *from sources*. If you use
|
||||
packages available for your operating system distribution you should skip over
|
||||
and continue with the *Configuration* section, see below.
|
||||
|
||||
ngIRCd is developed for UNIX-based systems, which means that the installation
|
||||
on modern UNIX-like systems that are supported by GNU autoconf and GNU
|
||||
automake ("`configure` script") should be no problem.
|
||||
|
||||
The normal installation procedure after getting (and expanding) the source
|
||||
files (using a distribution archive or Git) is as following:
|
||||
|
||||
1) Satisfy prerequisites
|
||||
2) `./autogen.sh` [only necessary when using "raw" sources with Git]
|
||||
3) `./configure`
|
||||
4) `make`
|
||||
5) `make install`
|
||||
|
||||
(Please see details below!)
|
||||
|
||||
Now the newly compiled executable "ngircd" is installed in its standard
|
||||
location, `/usr/local/sbin/`.
|
||||
|
||||
If no previous version of the configuration file exists (the standard name
|
||||
is `/usr/local/etc/ngircd.conf)`, a sample configuration file containing all
|
||||
possible options will be installed there. You'll find its template in the
|
||||
`doc/` directory: `sample-ngircd.conf`.
|
||||
|
||||
The next step is to configure and afterwards start the daemon. See the section
|
||||
*Configuration* below.
|
||||
|
||||
### Satisfy prerequisites
|
||||
|
||||
When building from source, you'll need some other software to build ngIRCd:
|
||||
for example a working C compiler, make tool, and a few libraries depending on
|
||||
the feature set you want to enable at compile time (like IDENT, SSL, and PAM).
|
||||
|
||||
And if you aren't using a distribution archive ("tar.gz" file), but cloned the
|
||||
plain source archive, you need a few additional tools to generate the build
|
||||
system itself: GNU automake and autoconf, as well as pkg-config.
|
||||
|
||||
If you are using one of the "big" operating systems or Linux distributions,
|
||||
you can use the following commands to install all the required packages to
|
||||
build the sources including all optional features and to run the test suite:
|
||||
|
||||
#### Red Hat / Fedora based distributions
|
||||
|
||||
``` shell
|
||||
yum install \
|
||||
autoconf automake expect gcc glibc-devel gnutls-devel \
|
||||
libident-devel make pam-devel pkg-config tcp_wrappers-devel \
|
||||
telnet zlib-devel
|
||||
```
|
||||
|
||||
#### Debian / Ubuntu based distributions
|
||||
|
||||
``` shell
|
||||
apt-get install \
|
||||
autoconf automake build-essential expect libgnutls28-dev \
|
||||
libident-dev libpam-dev pkg-config libwrap0-dev libz-dev telnet
|
||||
```
|
||||
|
||||
#### ArchLinux based distributions
|
||||
|
||||
``` shell
|
||||
pacman -S --needed \
|
||||
autoconf automake expect gcc gnutls inetutils libident libwrap \
|
||||
make pam pkg-config zlib
|
||||
```
|
||||
|
||||
### `./autogen.sh`
|
||||
|
||||
The first step, to run `./autogen.sh`, is *only* necessary if the `configure`
|
||||
script itself isn't already generated and available. This never happens in
|
||||
official ("stable") releases in "tar.gz" archives, but when cloning the source
|
||||
code repository using Git.
|
||||
|
||||
**This step is therefore only interesting for developers!**
|
||||
|
||||
The `autogen.sh` script produces the `Makefile.in`'s, which are necessary for
|
||||
the configure script itself, and some more files for `make(1)`.
|
||||
|
||||
To run `autogen.sh` you'll need GNU autoconf, GNU automake and pkg-config: at
|
||||
least autoconf 2.61 and automake 1.10 are required, newer is better. But don't
|
||||
use automake 1.12 or newer for creating distribution archives: it will work
|
||||
but lack "de-ANSI-fication" support in the generated Makefile's! Stick with
|
||||
automake 1.11.x for this purpose ...
|
||||
|
||||
So *automake 1.11.x* and *autoconf 2.67+* is recommended.
|
||||
|
||||
Again: "end users" do not need this step and neither need GNU autoconf nor GNU
|
||||
automake at all!
|
||||
|
||||
### `./configure`
|
||||
|
||||
The `configure` script is used to detect local system dependencies.
|
||||
|
||||
In the perfect case, `configure` should recognize all needed libraries, header
|
||||
files and so on. If this shouldn't work, `./configure --help` shows all
|
||||
possible options.
|
||||
|
||||
In addition, you can pass some command line options to `configure` to enable
|
||||
and/or disable some features of ngIRCd. All these options are shown using
|
||||
`./configure --help`, too.
|
||||
|
||||
Compiling a static binary will avoid you the hassle of feeding a chroot dir
|
||||
(if you want use the chroot feature). Just do something like:
|
||||
|
||||
``` shell
|
||||
CFLAGS=-static ./configure [--your-options ...]
|
||||
```
|
||||
|
||||
Then you can use a void directory as ChrootDir (like OpenSSH's `/var/empty`).
|
||||
|
||||
### `make`
|
||||
|
||||
The `make(1)` command uses the `Makefile`'s produced by `configure` and
|
||||
compiles the ngIRCd daemon.
|
||||
|
||||
### `make install`
|
||||
|
||||
Use `make install` to install the server and a sample configuration file on
|
||||
the local system. Normally, root privileges are necessary to complete this
|
||||
step. If there is already an older configuration file present, it won't be
|
||||
overwritten.
|
||||
|
||||
These files and folders will be installed by default:
|
||||
|
||||
- `/usr/local/sbin/ngircd`: executable server
|
||||
- `/usr/local/etc/ngircd.conf`: sample configuration (if not already present)
|
||||
- `/usr/local/share/doc/ngircd/`: documentation
|
||||
- `/usr/local/share/man/`: manual pages
|
||||
|
||||
### Additional features
|
||||
|
||||
The following optional features can be compiled into the daemon by passing
|
||||
options to the `configure` script. Most options can handle a `<path>` argument
|
||||
which will be used to search for the required libraries and header files in
|
||||
the given paths (`<path>/lib/...`, `<path>/include/...`) in addition to the
|
||||
standard locations.
|
||||
|
||||
- Syslog Logging (autodetected by default):
|
||||
|
||||
`--with-syslog[=<path>]` / `--without-syslog`
|
||||
|
||||
Enable (disable) support for logging to "syslog", which should be
|
||||
available on most modern UNIX-like operating systems by default.
|
||||
|
||||
- ZLib Compression (autodetected by default):
|
||||
|
||||
`--with-zlib[=<path>]` / `--without-zlib`
|
||||
|
||||
Enable (disable) support for compressed server-server links.
|
||||
The Z compression library ("libz") is required for this option.
|
||||
|
||||
- IO Backend (autodetected by default):
|
||||
|
||||
- `--with-select[=<path>]` / `--without-select`
|
||||
- `--with-poll[=<path>]` / `--without-poll`
|
||||
- `--with-devpoll[=<path>]` / `--without-devpoll`
|
||||
- `--with-epoll[=<path>]` / `--without-epoll`
|
||||
- `--with-kqueue[=<path>]` / `--without-kqueue`
|
||||
|
||||
ngIRCd can use different IO "backends": the "old school" `select(2)` and
|
||||
`poll(2)` API which should be supported by most UNIX-like operating systems,
|
||||
or the more efficient and flexible `epoll(7)` (Linux >=2.6), `kqueue(2)`
|
||||
(BSD) and `/dev/poll` APIs.
|
||||
|
||||
By default the IO backend is autodetected, but you can use `--without-xxx`
|
||||
to disable a more enhanced API.
|
||||
|
||||
When using the `epoll(7)` API, support for `select(2)` is compiled in as
|
||||
well by default, to enable the binary to run on older Linux kernels (<2.6),
|
||||
too.
|
||||
|
||||
- IDENT-Support:
|
||||
|
||||
`--with-ident[=<path>]`
|
||||
|
||||
Include support for IDENT ("AUTH") lookups. The "ident" library is
|
||||
required for this option.
|
||||
|
||||
- TCP-Wrappers:
|
||||
|
||||
`--with-tcp-wrappers[=<path>]`
|
||||
|
||||
Include support for Wietse Venemas "TCP Wrappers" to limit client access
|
||||
to the daemon, for example by using `/etc/hosts.{allow|deny}`.
|
||||
The "libwrap" is required for this option.
|
||||
|
||||
- PAM:
|
||||
|
||||
`--with-pam[=<path>]`
|
||||
|
||||
Enable support for PAM, the Pluggable Authentication Modules library.
|
||||
See `doc/PAM.txt` for details.
|
||||
|
||||
- SSL:
|
||||
|
||||
- `--with-openssl[=<path>]`
|
||||
- `--with-gnutls[=<path>]`
|
||||
|
||||
Enable support for SSL/TLS using OpenSSL or GnuTLS libraries.
|
||||
See `doc/SSL.txt` for details.
|
||||
|
||||
- IPv6:
|
||||
|
||||
`--enable-ipv6`
|
||||
|
||||
Adds support for version 6 of the Internet Protocol.
|
||||
|
||||
## Configuration
|
||||
|
||||
Please have a look at the `ngircd(8)` and `ngircd.conf(5)` manual pages for
|
||||
details and all possible command line and configuration options -- **and don't
|
||||
forget to run `ngircd --configtest` to validate your configuration file!**
|
||||
|
||||
After installing ngIRCd, a sample configuration file will be set up (if it
|
||||
does not exist already). By default, when installing from sources, the file is
|
||||
named `/usr/local/etc/ngircd.conf` (other common names, especially for
|
||||
distribution packages, are `/etc/ngircd.conf` or `/etc/ngircd/ngircd.conf`).
|
||||
|
||||
You can find the template of the sample configuration file in the `doc/`
|
||||
directory as `sample-ngircd.conf` and
|
||||
[online](https://ngircd.barton.de/doc/sample-ngircd.conf) on the homepage. It
|
||||
contains all available options.
|
||||
|
||||
In the sample configuration file, there are comments beginning with `#` *or*
|
||||
`;` -- this is only for the better understanding of the file, both comment
|
||||
styles are equal.
|
||||
|
||||
The file is separated in five blocks: *[Global]*, *[Features]*, *[Operator]*,
|
||||
*[Server]*, and *[Channel]*.
|
||||
|
||||
In the *[Global]* section, there is the main configuration like the server
|
||||
name and the ports, on which the server should be listening. Options in
|
||||
the *[Features]* section enable or disable functionality in the daemon.
|
||||
IRC operators of this server are defined in *[Operator]* blocks, remote
|
||||
servers are configured in *[Server]* sections, and *[Channel]* blocks are
|
||||
used to configure pre-defined ("persistent") IRC channels.
|
||||
|
||||
### Manual Pages Online
|
||||
|
||||
- Daemon: [ngircd.8](https://manpages.debian.org/ngircd.8)
|
||||
- Configutation file: [ngircd.conf.5](https://manpages.debian.org/ngircd.conf.5)
|
||||
|
||||
## Command line options
|
||||
|
||||
ngIRCd supports the following command line options:
|
||||
|
||||
- `-f`, `--config <file>`
|
||||
|
||||
The daemon uses the file `<file>` as configuration file rather than
|
||||
the standard configuration `/usr/local/etc/ngircd.conf`.
|
||||
|
||||
- `-n`, `--nodaemon`
|
||||
|
||||
ngIRCd should be running as a foreground process.
|
||||
|
||||
- `-p`, `--passive`
|
||||
|
||||
Server-links won't be automatically established.
|
||||
|
||||
- `-t`, `--configtest`
|
||||
|
||||
Reads, validates and dumps the configuration file as interpreted
|
||||
by the server. Then exits.
|
||||
|
||||
Use `--help` to see a short help text describing all available parameters
|
||||
the server understands, with `--version` the ngIRCd shows its version
|
||||
number. In both cases the server exits after the output.
|
||||
|
||||
Please see the `ngircd(8)` manual page for more details!
|
42
Makefile.am
42
Makefile.am
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# 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
|
||||
@@ -9,28 +9,27 @@
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
#
|
||||
|
||||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
SUBDIRS = doc src man contrib
|
||||
|
||||
clean-local:
|
||||
EXTRA_DIST = README.md INSTALL.md autogen.sh configure.ng .clang_complete .mailmap
|
||||
|
||||
clean-local: osxpkg-clean
|
||||
rm -f build-stamp*
|
||||
rm -rf ngircd.dest
|
||||
|
||||
maintainer-clean-local:
|
||||
rm -rf autom4te.cache
|
||||
rm -f Makefile.in Makefile aclocal.m4 configure
|
||||
rm -f mkinstalldirs missing depcomp install-sh
|
||||
rm -f Makefile.in Makefile aclocal.m4 configure configure.ac
|
||||
rm -f ar-lib mkinstalldirs missing depcomp install-sh
|
||||
rm -f config.log debian
|
||||
|
||||
testsuite:
|
||||
make -C src/testsuite check
|
||||
cd src/testsuite && ${MAKE} check
|
||||
|
||||
lint:
|
||||
make -C src/ngircd lint
|
||||
cd src/ngircd && ${MAKE} lint
|
||||
|
||||
srcdoc:
|
||||
make -C doc srcdoc
|
||||
cd doc && ${MAKE} srcdoc
|
||||
|
||||
have-xcodebuild:
|
||||
@xcodebuild -project contrib/MacOSX/ngIRCd.xcodeproj -list \
|
||||
@@ -60,28 +59,33 @@ deb:
|
||||
dpkg-buildpackage -rfakeroot -i
|
||||
|
||||
osxpkg: have-packagemaker osxpkg-dest
|
||||
cd contrib/MacOSX && packagemaker \
|
||||
cd contrib/MacOSX && packagemaker --no-recommend \
|
||||
--doc ngIRCd.pmdoc \
|
||||
--out ../../$(distdir).mpkg
|
||||
rm -f $(distdir).mpkg.zip
|
||||
zip -ro9 $(distdir).mpkg.zip $(distdir).mpkg
|
||||
${MAKE} osxpkg-clean
|
||||
|
||||
osxpkg-clean:
|
||||
[ ! -r ngircd.dest ] || sudo -n rm -rf ngircd.dest
|
||||
rm -rf ngircd.dest $(distdir).mpkg
|
||||
|
||||
osxpkg-dest: have-xcodebuild clean
|
||||
osxpkg-dest: have-xcodebuild osxpkg-clean clean
|
||||
./configure --prefix=/opt/ngircd
|
||||
make xcode
|
||||
make -C contrib/MacOSX de.barton.ngircd.plist
|
||||
${MAKE} xcode
|
||||
${MAKE} -C contrib/MacOSX de.barton.ngircd.plist
|
||||
mkdir -p ngircd.dest/opt/ngircd/sbin
|
||||
DESTDIR="$$PWD/ngircd.dest" make -C doc install
|
||||
DESTDIR="$$PWD/ngircd.dest" make -C contrib install
|
||||
DESTDIR="$$PWD/ngircd.dest" make -C man install
|
||||
DESTDIR="$$PWD/ngircd.dest" ${MAKE} -C doc install
|
||||
DESTDIR="$$PWD/ngircd.dest" ${MAKE} -C contrib install
|
||||
DESTDIR="$$PWD/ngircd.dest" ${MAKE} -C man install
|
||||
cp contrib/MacOSX/build/Default/ngIRCd \
|
||||
ngircd.dest/opt/ngircd/sbin/ngircd
|
||||
rm ngircd.dest/opt/ngircd/etc/ngircd.conf
|
||||
echo "Have a nice day IRCing!" >ngircd.dest/opt/ngircd/etc/ngircd.motd
|
||||
chmod -R a-s,og-w,a+rX ngircd.dest
|
||||
sudo chown -R root:wheel ngircd.dest
|
||||
|
||||
.PHONY: deb have-packagemaker have-xcodebuild lint osxpkg osxpkg-dest rpm \
|
||||
srcdoc testsuite xcode xcode-clean
|
||||
.PHONY: deb have-packagemaker have-xcodebuild lint osxpkg osxpkg-clean \
|
||||
osxpkg-dest rpm srcdoc testsuite xcode xcode-clean
|
||||
|
||||
# -eof-
|
||||
|
519
NEWS
519
NEWS
@@ -2,18 +2,481 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2012 Alexander Barton and Contributors.
|
||||
(c)2001-2020 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- NEWS --
|
||||
|
||||
ngIRCd Release 19
|
||||
ngIRCd 26 (2020-06-20)
|
||||
|
||||
ngIRCd 26~rc2 (2020-06-11)
|
||||
- Add AppStream metadata file (contrib/de.barton.ngircd.metainfo.xml).
|
||||
- Various bug fixes, see the ChangeLog. No new or changed functionality.
|
||||
|
||||
ngIRCd 26~rc1 (2020-05-10)
|
||||
- Allow up to 512 characters per line in MOTD and help text files (but keep
|
||||
in mind that lines can't get that long, because they have to be prefixed
|
||||
before being sent to the client). But this allows for more fancy MOTDs :-)
|
||||
Closes #271.
|
||||
- Show the actually allowed channel types in the ISUPPORT(005) numeric which
|
||||
are configured by the "AllowedChannelTypes" configuration variable.
|
||||
Closes #273.
|
||||
- Handle commands in the read buffer before reading more data and don't wait
|
||||
for the network in this case: If there are more bytes in the read buffer
|
||||
already than a single valid IRC command can get long (513 bytes), wait for
|
||||
this/those command(s) to be handled first and don't try to read even more
|
||||
data from the network (which most probably would overflow the read buffer
|
||||
of this connection soon).
|
||||
- Log G-/K-Line changes only when not initiated by a server: this prevents
|
||||
the log from becoming spammed during "net bursts".
|
||||
- Update test suite to include SSL tests, including checking for reloading
|
||||
certificates during runtime.
|
||||
- Add support for GnuTLS certificate reload, which is quite handy when using
|
||||
Let's Encrypt, for example. Until now this was only supported when linked
|
||||
with OpenSSL. Thanks a lot, Hilko Bengen <bengen@hilluzination.de>!
|
||||
- Allow setting arbitrary channel modes in the configuration file by handling
|
||||
them like in MODE commands, and allow multiple "Modes =" lines per [Channel]
|
||||
section. Thanks to Michi <michi+ngircd@dataswamp.org>!
|
||||
Closes #55.
|
||||
- Add "FNC" (forced nick changes) to ISUPPORT(005) numeric. Most probably
|
||||
this doesn't make any difference to any client, but it seems correct.
|
||||
See <http://www.irc.org/tech_docs/005.html> for details.
|
||||
- Enhance handling of command line errors, and return with exit code 0 ("no
|
||||
error") when "--help" or "--version" is used (which resulted in exit code 1,
|
||||
"error" before). Exit with code 2 ("command line error") for all other
|
||||
invalid command line options, and show the error message itself on stderr
|
||||
(instead of stdout and exit code 1, "generic error", as before).
|
||||
This new behaviour is more in line with the GNU "coding standards",
|
||||
see <https://www.gnu.org/prep/standards/html_node/_002d_002dhelp.html>.
|
||||
- Add ./contrib/nglog.sh: This script parses the log output of ngircd(8),
|
||||
and colorizes the messages according to their log level. Example usage:
|
||||
ngircd -f $PWD/doc/sample-ngircd.conf -np | ./contrib/nglog.sh
|
||||
- Enlarge buffers of info texts to 128 bytes. This includes:
|
||||
- "Real name" of a client (4th filed of the USER command).
|
||||
- Server info text ("Info" configuration option).
|
||||
- Admin info texts and email address ("AdminInfo1", "AdminInfo2" and
|
||||
"AdminEmail" configuration options).
|
||||
- Network name ("Network" configuration option).
|
||||
The limit was 64 bytes before ...
|
||||
Closes #258.
|
||||
- Streamline handling of invalid and unset server name: Don't exit during
|
||||
runtime (REHASH command, HUP signal), because the server name can't be
|
||||
changed in this case anyway and the new invalid name will be ignored.
|
||||
- Slightly reorder startup steps, and enhance logging:
|
||||
- Show name of configuration file at the beginning of start up.
|
||||
- Add a message when ngIRCd is ready, including its host name.
|
||||
- Show name of configuration file on REHASH (SIGHUP), too.
|
||||
- Change level of "done message" to NOTICE, like "starting" & "ready".
|
||||
- Initialize IO functions before channels, connections, clients, ...
|
||||
- configure.ng: OpenSSL can depends on lz or latomic so use pkg-config to
|
||||
find those dependencies and fallback to existing mechanism.
|
||||
Closes #256.
|
||||
|
||||
ngIRCd 25 (2019-01-23)
|
||||
|
||||
- Implement new configuration option "MaxPenaltyTime", which configures the
|
||||
maximum penalty time increase in seconds, per penalty event. Set to -1 for
|
||||
no limit (the default), 0 to disable penalties altogether. ngIRCd doesn't
|
||||
use penalty increases higher than 2 seconds during normal operation, so
|
||||
values higher than 1 rarely make sense.
|
||||
Disabling (or reducing) penalties can greatly speed up "make check" runs
|
||||
for example, see below, but are mostly a debugging feature and normally
|
||||
not meant to be used on production systems!
|
||||
Some example timings running "make check" from my macOS workstation:
|
||||
- MaxPenaltyTime not set: 4:41,79s
|
||||
- "MaxPenaltyTime = 1": 3:14,71s
|
||||
- "MaxPenaltyTime = 0": 25,46s
|
||||
Closes #249 and #251.
|
||||
- Update Xcode project for latest Xcode version (10.0)
|
||||
- Allow a 5th parameter in WEBIRC. Thanks to "ItsOnlyBinary".
|
||||
Closes #247.
|
||||
|
||||
ngIRCd 25~rc1 (2018-08-11)
|
||||
- Only send TOPIC updates to a channel when the topic actually changed:
|
||||
This prevents the channel from becoming flooded by unnecessary TOPIC update
|
||||
messages, that can happen when IRC services try to enforce a certain topic
|
||||
but which is already set (at least on the local server), for example.
|
||||
Therefore still forward it to all servers, but don't inform local clients
|
||||
(still update setter and timestamp information, though!).
|
||||
- Update Xcode project for latest Xcode version (9.2). This includes adding
|
||||
missing and deleting obsolete file references.
|
||||
- Handle user mode "C" ("Only users that share a channel are allowed to send
|
||||
messages") like user mode "b" ("block private messages and notices"): allow
|
||||
messages from servers, services, and IRC Operators, too. Change proposed by
|
||||
"wowaname" back in 2015 in #ngircd, thanks!
|
||||
- Allow IRC Ops and remote servers to KILL service clients: such clients
|
||||
behave like regular users, therefore IRC operators and servers should be
|
||||
able to KILL them: for example to resolve nick collisions.
|
||||
Closes #242.
|
||||
|
||||
ngIRCd 24 (2017-01-20)
|
||||
|
||||
ngIRCd 24~rc1 (2017-01-07)
|
||||
- Log privilege violations and failed OPER request with log level "error"
|
||||
and send it to the "&SERVER" channel, too.
|
||||
- Immediately shut down connection when receiving an "ERROR" command,
|
||||
don't wait for the peer to close the connection. This allows the daemon
|
||||
to forward the received "ERROR" message in the network, instead of the
|
||||
very generic "client closed connection" message.
|
||||
- Explicitly forbid remote servers to modify "x-lines" (G-LINES) when the
|
||||
"AllowRemoteOper" configuration option isn't set, even when the command
|
||||
seems to originate from the remote server itself: this prevents GLINE's
|
||||
to become set during server handshake in this case (what wouldn't be
|
||||
possible during regular runtime when a remote IRC Op sends the command)
|
||||
and what can't be undone by IRC Ops later on (because of the missing
|
||||
"AllowRemoteOper" option) ...
|
||||
- Update Xcode project for latest Xcode version (8.0), and fix "duplicate
|
||||
symbols" error messages when building (linking) the binary.
|
||||
- Add "Documentation" variables to systemd configuration files.
|
||||
- Make sure that SYSCONFDIR is always set, which can be handy when
|
||||
using source code linters when ./configure hasn't been run already.
|
||||
- Add the new "PAMServiceName" configuration option to specify the name
|
||||
used as PAM service name. This setting allows to run multiple ngIRCd
|
||||
instances with different PAM configurations for each instance.
|
||||
Thanks to Christian Aistleitner <christian@quelltextlich.at> for the
|
||||
patch, closes #226.
|
||||
- Add an ".editorconfig" file to the project.
|
||||
- Limit the number of message target, and suppress duplicates: This
|
||||
prevents an user from flooding the server using commands like this:
|
||||
"PRIVMSG nick1,nick1,nick1,...".
|
||||
Duplicate targets are suppressed silently (channels and clients).
|
||||
In addition, the maximum number of targets per PRIVMSG, NOTICE, ...
|
||||
command are limited to MAX_HNDL_TARGETS (25). If there are more, the
|
||||
daemon sends the new 407 (ERR_TOOMANYTARGETS_MSG) numeric, containing
|
||||
the first target that hasn't been handled any more. Closes #187.
|
||||
- Make contrib/platformtest.sh script more portable, and only show
|
||||
"runs=Y" when the test suite really has been passed successfully.
|
||||
|
||||
ngIRCd 23 (2015-11-16)
|
||||
|
||||
ngIRCd 23~rc1 (2015-09-06)
|
||||
- Use "NOTICE *" before registration instead of "NOTICE AUTH". "AUTH" is
|
||||
a valid nickname so sending notices to it is probably not a good idea.
|
||||
Use "*" as the target instead as done with numerics when the nick is not
|
||||
available. This mimics the behavior in Charybdis, IRCD-Hybrid, InspIRCd
|
||||
2.2, Plexus 4, etc. Closes #217.
|
||||
The "NoticeAuth" configuration variable (ngircd.conf) has been renamed
|
||||
to "NoticeBeforeRegistration" accordingly, but the old name is still
|
||||
supported for compatibility reasons.
|
||||
- Implement new channel mode "N" (regular users can't change their nick
|
||||
name while on this channel). Closes #214.
|
||||
- Keep track of who placed bans, invites, and excepts.
|
||||
Idea and implementation by LucentW, Thanks! Closes #203.
|
||||
- Implement numeric RPL_LISTSTART(321). lightIRC and other clients
|
||||
expecting RPL_LISTSTART should now behave correctly.
|
||||
Idea and implementation by LucentW, Thanks! Closes #207.
|
||||
- Streamline the effect of "MorePrivacy" option: Update documentation
|
||||
in ngircd.conf(5); don't hide channels for IRC Ops on LIST and don't
|
||||
hide IP addresses/hostnames on WHOIS when "MorePrivacy" is in effect.
|
||||
This closes #198.
|
||||
- IRC operators now can kick anyone when "OperCanMode" is set.
|
||||
Idea and implementation by LucentW, Thanks! Closes #202.
|
||||
- Implement user mode "I": Hide channels on WHOIS: this mode prevents
|
||||
ngIRCd from showing channels on WHOIS (IRC Operators can always see
|
||||
the channel list).
|
||||
Idea and implementation by LucentW, Thanks! Closes #197.
|
||||
- INVITE command: Implement ERR_USERNOTONSERV(504) numeric and make sure
|
||||
that the target user is on the same server when inviting other users
|
||||
to local ("&") channels.
|
||||
Idea by Cahata, thanks! Closes #183.
|
||||
- MODE command: Always report channel creation time. Up to now when
|
||||
receiving a MODE command, ngIRCd only reported the channel creation
|
||||
time to clients that were members of the channel. This patch reports
|
||||
the channel creation time to all clients, regardless if they are joined
|
||||
to that channel or not. At least ircd-seven behaves like this.
|
||||
This closes #188. Reported by Cahata, thanks!
|
||||
|
||||
ngIRCd 22.1 (2015-04-06)
|
||||
|
||||
- Update "CipherList" to not enable SSLv3 by default. Idea, initial patch,
|
||||
and testing by Christoph Biedl <ngircd.anoy@manchmal.in-ulm.de>.
|
||||
- Change ngIRCd test suite not to use DNS lookups: Different operating
|
||||
systems do behave quite differently when doing DNS lookups, for example
|
||||
"127.0.0.1" sometimes resolves to "localhost" and sometimes to
|
||||
"localhost.localdomain" (for example OpenBSD). And other OS resolve
|
||||
"localhost" to the real host name (for example Cygwin). So not using
|
||||
DNS at all makes the test site much more portable.
|
||||
|
||||
ngIRCd 22 (2014-10-11)
|
||||
|
||||
- Match all list patterns case-insensitive: this affects the invite-,
|
||||
ban-, and except lists, as well as G-Lines an K-Lines.
|
||||
Problem pointed out by "wowaname" on #ngircd, thanks!
|
||||
|
||||
ngIRCd 22~rc1 (2014-09-29)
|
||||
- Sync "except lists" between servers: Up to now, ban, invite, and G-Line
|
||||
lists have been synced between servers while linking -- but obviously
|
||||
nobody noticed that except list have been missing ever since. Until now.
|
||||
Thanks to "j4jackj", who reported this issue in #ngircd.
|
||||
- Allow longer user names (up to 63 characters) for authentication.
|
||||
- Increase MAX_SERVERS from 16 to 64: There are installations out there
|
||||
that would like to configure more than 16 links per server, so increase
|
||||
this limit. Best would be to get rid of MAX_SERVERS altogether and make
|
||||
if fully dynamic, but start with this quick and dirty hack ...
|
||||
- Test suite/platformtest.sh: Detect when tests have been skipped.
|
||||
- Allow "DefaultUserModes" to set all possible modes, including modes only
|
||||
settable by IRC Operators.
|
||||
- Implement user mode "F": "relaxed flood protection". Clients with mode
|
||||
"F" set are allowed to rapidly send data to the daemon. This mode is only
|
||||
settable by IRC Operators and can cause problems in the network -- so be
|
||||
careful and only set it on "trusted" clients!
|
||||
User mode "F" is used by Bahamut for this purpose, for example.
|
||||
- Use server password when PAM is compiled in but disabled.
|
||||
- Streamline punctuation of log messages.
|
||||
- Return ISUPPORT(005) numerics on "VERSION". This is how ircd-seven,
|
||||
Charybdis, Hybrid, and InspIRCd behave, for example.
|
||||
- configure: Only link "contrib/Debian" if it exists, which isn't the case
|
||||
on "VPATH builds", for example.
|
||||
- Show the account name in WHOIS. This uses the same numeric as Charybdis
|
||||
and ircu families: WHOISLOGGEDIN(330).
|
||||
- Pattern matching: Remove "range matching" in our pattern matching code
|
||||
using the "[...]" syntax, because [ and ] are valid characters in nick
|
||||
names and one has to quote them currently using the "\" character, which
|
||||
is quite unexpected for users.
|
||||
- platformtest.sh: New option "-x", don't regenerate build system and
|
||||
allow using separate source and build trees.
|
||||
- Test suite: explicitly enable glibc memory checking.
|
||||
- Make "MODE -k" handling more robust and compatible, send "fake '*' key"
|
||||
in all replies.
|
||||
- portabtest: Actually test the functions snprintf(), strlcpy(), strlcat(),
|
||||
and vsnprintf() for correctness, not only existence (which was quite
|
||||
useless, because if they weren't available, the program could not have
|
||||
been linked at all ...).
|
||||
- Implement new configuration option "Network": it is used to set the
|
||||
(completely optional) "network name", to which this instance of the
|
||||
daemon belongs. When set, this name is used in the ISUPPORT(005) numeric
|
||||
which is sent to all clients connecting to the server after logging in.
|
||||
- Update doc/Platforms.txt.
|
||||
- Various code cleanups, remove unused code, streamline error handling.
|
||||
Remove all imp.h and exp.h header files, support non-standard vsnprintf()
|
||||
return codes, and fix some K&R C portability issues. Streamline
|
||||
DEBUG_ARRAY, DEBUG_BUFFER, DEBUG_IO, DEBUG_ZIP definitions.
|
||||
- Increase penalty time to 10 seconds when handling OPER commands with an
|
||||
invalid password.
|
||||
|
||||
ngIRCd 21.1 (2014-03-25)
|
||||
|
||||
- Don't ignore but use the server password when PAM is compiled in but
|
||||
disabled. Thanks to Roy Sindre Norangshol <roy.sindre@norangshol.no>!
|
||||
- doc/Platforms.txt: Update from master branch.
|
||||
- doc/Services.txt: Update information for Anope 2.x.
|
||||
- configure: add support for the LDFLAGS_END and LIBS_END variables to add
|
||||
linker flags and libraries at the end of the configure run (CFLAGS_END has
|
||||
been implemented already).
|
||||
- Update Copyright notices for 2014 :-)
|
||||
|
||||
ngIRCd 21 (2013-10-30)
|
||||
|
||||
- Call arc4random_stir() in forked subprocesses, when available. This
|
||||
is required by FreeBSD <10 and current NetBSD at least to correctly
|
||||
initialize the "arc4" random number generator on these platforms.
|
||||
|
||||
ngIRCd 21~rc2 (2013-10-20)
|
||||
- Report the correct configuration file name on configuration errors,
|
||||
support longer configuration lines, and warn when lines are truncated.
|
||||
|
||||
ngIRCd 21~rc1 (2013-10-05)
|
||||
- Actually KILL clients on GLINE/KLINE. (Closes bug #156)
|
||||
- Add support to show all user links using the "STATS L" (uppercase)
|
||||
command (restricted to IRC Operators).
|
||||
- Implement configurable SSL cipher list selection for GnuTLS and OpenSSL
|
||||
using the new configuration option "CipherList". In addition, this
|
||||
changes the defaults to more secure values: "HIGH:!aNULL:@STRENGTH" for
|
||||
OpenSSL, and "SECURE128" for GnuTLS.
|
||||
- Show connection flag "s" (SSL) in RPL_TRACE{LINK|SERVER} messages: now
|
||||
you can check if a server-to-server link is SSL-encrypted or not using
|
||||
the IRC "TRACE" command.
|
||||
- Implement the new configuration option "DefaultUserModes" which lists
|
||||
user modes that become automatically set on new local clients right
|
||||
after login. Please note that only modes can be set that the client
|
||||
could set on itself, so you can't set "a" (away) or "o" (IRC Op),
|
||||
for example! User modes "i" (invisible) or "x" (cloaked) etc. are
|
||||
"interesting", though. (Closes bug #160)
|
||||
- Add support for the new METADATA "account" property, which allows
|
||||
services to automatically identify users after netsplits and across
|
||||
service restarts.
|
||||
- Implement a new configuration option "AllowedChannelTypes" that lists
|
||||
all allowed channel types (channel prefixes) for newly created channels
|
||||
on the local server. By default, all supported channel types are allowed.
|
||||
If set to the empty string, local clients can't create new channels at
|
||||
all, which equals the old "PredefChannelsOnly = yes" setting.
|
||||
This change deprecates the "PredefChannelsOnly" variable, too, but it is
|
||||
still supported and translated to the appropriate "AllowedChannelTypes"
|
||||
setting. When the old "PredefChannelsOnly" variable is processed, a
|
||||
warning message is logged. (Closes bug #152)
|
||||
- Add support for "client certificate fingerprinting". When a client
|
||||
passes an SSL certificate to the server, the "fingerprint" will be
|
||||
forwarded in the network which enables IRC services to identify the
|
||||
user using this certificate and not using passwords.
|
||||
- Implement a new configuration option "IncludeDir" in the "[Options]"
|
||||
section that can be used to specify a directory which can contain
|
||||
further configuration files and configuration file snippets matching
|
||||
the pattern "*.conf". These files are read in after the main server
|
||||
configuration file ("ngircd.conf" by default) has been read in and
|
||||
parsed. The default is "$SYSCONFDIR/ngircd.conf.d", so that it is
|
||||
possible to adjust the configuration only by placing additional files
|
||||
into this directory. (Closes bug #157)
|
||||
- Add Travis-CI configuration file (".travis.yml") to project.
|
||||
- ngIRCd now accepts user names including "@" characters, saves the
|
||||
unmodified name for authentication but stores only the part in front
|
||||
of the "@" character as "IRC user name". And the latter is how
|
||||
ircd2.11, Bahamut, and irc-seven behave as well. (Closes bug #155)
|
||||
- Lots of IRC "information functions" like ADMIN, INFO, ... now accept
|
||||
server masks and names of connected users (in addition to server names)
|
||||
for specifying the target server of the command. (Closes bug #153)
|
||||
- Implement a new configuration option "IdleTimeout" in the "[Limits]"
|
||||
section of the configuration file which can be used to set a timeout
|
||||
in seconds after which the whole daemon will shutdown when no more
|
||||
connections are left active after handling at least one client.
|
||||
The default is 0, "never".
|
||||
This can be useful for testing or when ngIRCd is started using "socket
|
||||
activation" with systemd(8), for example.
|
||||
- Implement support for systemd(8) "socket activation".
|
||||
- Enable WHOIS to display information about IRC Services using the new
|
||||
numeric 310(RPL_WHOISSERVICE) This numeric is used for this purpose by
|
||||
InspIRCd, for example -- but as usual, other numerics are in use, too,
|
||||
like 613 in UltimateIRCd ...
|
||||
Please note that neither the Operator (+o) not the "bot status" (+B)
|
||||
of an IRC service is displayed in the output.
|
||||
- Update systemd(8) example configuration files in ./contrib/ directory:
|
||||
the "ngircd.service" file now uses the "forking" service type which
|
||||
enhances the log messages shown by "systemctl status ngircd.service",
|
||||
and the new "ngircd.socket" file configures a systemd socket that
|
||||
configures a socket for ngIRCd and launches the daemon on demand.
|
||||
- Enhance help system and the HELP command: now a "help text file" can be
|
||||
set using the new configuration option "HelpFile" ("global" section),
|
||||
which is read in and parsed on server startup and configuration reload,
|
||||
and then is used to output individual help texts to specific topics.
|
||||
Please see the file ./doc/Commands.txt for details.
|
||||
|
||||
ngIRCd 20.3 (2013-08-23)
|
||||
|
||||
- This release is a bugfix release only, without new features.
|
||||
- Security: Fix a denial of service bug (server crash) which could happen
|
||||
when the configuration option "NoticeAuth" is enabled (which is NOT the
|
||||
default) and ngIRCd failed to send the "notice auth" messages to new
|
||||
clients connecting to the server (CVE-2013-5580).
|
||||
|
||||
ngIRCd 20.2 (2013-02-15)
|
||||
|
||||
- This release is a bugfix release only, without new features.
|
||||
- Security: Fix a denial of service bug in the function handling KICK
|
||||
commands that could be used by arbitrary users to crash the daemon
|
||||
(CVE-2013-1747).
|
||||
|
||||
ngIRCd 20.1 (2013-01-02)
|
||||
|
||||
- This release is a bugfix release only, without new features.
|
||||
|
||||
ngIRCd 20 (2012-12-17)
|
||||
|
||||
- Allow user names ("INDENT") up to 20 characters when ngIRCd has not
|
||||
been configured for "strict RFC mode". This is useful if you are using
|
||||
external (PAM) authentication mechanisms that require longer user names.
|
||||
Patch suggested by Brett Smith <brett@w3.org>, see
|
||||
<http://arthur.barton.de/pipermail/ngircd-ml/2012-October/000579.html>.
|
||||
|
||||
ngIRCd 20~rc2 (2012-12-02)
|
||||
- Rework cloaked hostname handling and implement the "METADATA cloakhost"
|
||||
subcommand: Now ngIRCd uses two fields internally, one to store the
|
||||
"real" hostname and one to save the "cloaked" hostname. This allows
|
||||
"foreign servers" (aka "IRC services") to alter the real and cloaked
|
||||
hostnames of clients without problems, even when the user itself issues
|
||||
additional "MODE +x" and "MODE -x" commands.
|
||||
|
||||
ngIRCd 20~rc1 (2012-11-11)
|
||||
- Update doc/Services.txt: describe the upcoming version of Anope 1.9.8,
|
||||
then including a protocol module for ngIRCd. And remove our own patches
|
||||
in ./contrib/Anope because they aren't supported any more ...
|
||||
- Implement new "METADATA" command which can be used by remote servers
|
||||
and IRC services to update client metadata like the client info text
|
||||
("real name"), user name, and hostname, and use this command to
|
||||
configure an cloaked hostname (user mode "+x") on remote servers:
|
||||
This prevents "double cloaking" of hostnames and even cloaked
|
||||
hostnames are in sync on all servers supporting "METADATA" now.
|
||||
- Implement new IRC "SVSNICK" command to allow remote servers (and IRC
|
||||
services) to change nicknames of already registered users. The SVSNICK
|
||||
command itself doesn't change the nickname, but it becomes forwarded
|
||||
to the server to which the user is connected to. And then this server
|
||||
initiates the real nickname changing using regular NICK commands.
|
||||
This allows to run mixed networks with old servers not supporting the
|
||||
SVSNICK command, because SVSNICK commands for nicknames on such servers
|
||||
are silently ignored and don't cause a desynchronization of the network.
|
||||
- New configuration option "MaxListSize" to configure the maximum number
|
||||
of channels returned by a LIST command. The default is 100, as before.
|
||||
- Implement user mode "b", "block messages": when a user has set mode "b",
|
||||
all private messages and notices to this user are blocked if they don't
|
||||
originate from a registered user, an IRC Op, server or service. The
|
||||
originator gets an error numeric sent back in this case,
|
||||
ERR_NONONREG_MSG (486), which is used by UnrealIRCd, too. (Closes #144)
|
||||
- Implement channel mode "V" (invite disallow): If the new channel mode
|
||||
"V" is set, the INVITE command becomes invalid and all clients get the
|
||||
new ERR_NOINVITE_MSG (518) reply. (Closes #143)
|
||||
- Implement channel mode "Q" and user mode "q": Both modes protect users
|
||||
from channel kicks: only IRC operators and servers can kick users having
|
||||
mode "q" or in channels with mode "Q". (Closes #141)
|
||||
- Allow users to "cloak" their hostname only when the configuration
|
||||
variable "CloakHostModeX" (introduced in 19.2) is set. Otherwise, only
|
||||
IRC operators, other servers, and services are allowed to set the user
|
||||
mode "+x": this prevents regular users from changing their hostmask to
|
||||
the name of the IRC server itself, which confused quite a few people ;-)
|
||||
(Closes #133)
|
||||
- New configuration option "OperChanPAutoOp": If disabled, IRC operators
|
||||
don't become channel operators in persistent channels when joining.
|
||||
Enabled by default, which has been the behavior of ngIRCd up to this
|
||||
patch. (Closes #135)
|
||||
- Allow IRC operators to see secret (+s) channels in LIST command as long
|
||||
as the "MorePrivacy" configuration option isn't enabled in the
|
||||
configuration file. (Closes #136)
|
||||
- Implement new (optional) IRC+ "CHARCONV" command to set a client
|
||||
character set that the server translates all messages to/from UTF-8.
|
||||
This feature requires the "libiconv" library and must be enabled using
|
||||
the new "--with-iconv" option of the ./configure script. See
|
||||
doc/Protocol.txt for details. (Closes #109)
|
||||
- Implement user mode "B" ("Bot flag"): it is settable and unsettable by
|
||||
every (non-restricted) client. This is how Unreal and InspIRCd do
|
||||
behave, and so do we :-)
|
||||
- Implement channel mode "M": Only the server, identified users and IRC
|
||||
operators are able to talk in such a channel.
|
||||
- Block nicknames that are reserved for services and are defined using the
|
||||
configuration variable "ServiceMask" in "Server" blocks; And this
|
||||
variable now can handle more than one mask separated by commas.
|
||||
- Implemented XOP channel user modes: "Half Op" ("+h", prefix "%") can set
|
||||
the channel modes +imntvIbek and kick all +v and normal users; "Admin"
|
||||
("+a", prefix "&") can set channel modes +imntvIbekoRsz and kick all +o,
|
||||
+h, +v and normal users; and "Owner" ("+q", prefix "~") can set channel
|
||||
modes +imntvIbekoRsz and kick all +a, +o, +h, +v and normal users.
|
||||
- Implement hashed cloaked hostnames for both the "CloakHost" and
|
||||
"CloakHostModeX" configuration options: now the admin can use the new
|
||||
'%x' placeholder to insert a hashed version of the clients hostname,
|
||||
and the new configuration option "CloakHostSalt" defines the salt for
|
||||
the hash function. When "CloakHostSalt" is not set (the default), a
|
||||
random salt will be generated after each server restart.
|
||||
|
||||
ngIRCd 19.2 (2012-06-19)
|
||||
|
||||
ngIRCd 19.2~rc1 (2012-06-13)
|
||||
- New configuration option "CloakHostModeX" to configure the hostname
|
||||
that gets used for IRC clients which have user mode "+x" enabled.
|
||||
Up to now, the name of the IRC server itself has been used for this,
|
||||
which still is the default when "CloakHostModeX" isn't set.
|
||||
- Add instructions for setting up Atheme IRC services.
|
||||
- Implement support for IRC capability handling, the new "CAP" command,
|
||||
and capability "multi-prefix" which allows both the NAME and WHO command
|
||||
handlers to return more than one "class prefix" to the client.
|
||||
|
||||
ngIRCd 19.1 (2012-03-19)
|
||||
|
||||
- Really include _all_ patches to build the Anope module into the
|
||||
distribution archive ... ooops!
|
||||
|
||||
ngIRCd 19 (2012-02-29)
|
||||
|
||||
ngIRCd 19~rc1 (2012-02-12)
|
||||
- Update preliminary ngIRCd protocol module for Anope 1.9.6, which now
|
||||
is the only supported version.
|
||||
- New numeric RPL_WHOISHOST_MSG(378), which returns the DNS hostname
|
||||
- New numeric RPL_WHOISHOST_MSG(378), which returns the DNS host name
|
||||
(if available) and the IP address of a client in the WHOIS reply.
|
||||
Only the user itself and local IRC operators get this numeric.
|
||||
- Implement channel exception list (mode 'e'). This allows a channel
|
||||
@@ -25,7 +488,7 @@ ngIRCd Release 19
|
||||
and receiver are on the same channel. This prevents private flooding
|
||||
by completely unknown clients.
|
||||
- New RPL_WHOISREGNICK_MSG(307) numeric in WHOIS command replies: it
|
||||
indicates if a nick name is registered (if user mode 'R' set).
|
||||
indicates if a nickname is registered (if user mode 'R' set).
|
||||
- Limit channel invite, ban, and exception lists to 50 entries and fix
|
||||
duplicate check and error messages when adding already listed entries
|
||||
or deleting no (longer) existing ones.
|
||||
@@ -61,7 +524,7 @@ ngIRCd Release 19
|
||||
NICK, and USER commands have been processed) and before the child
|
||||
processes for authentication are forked, so resource usage is smaller.
|
||||
- Added doc/Modes.txt: document modes supported by ngIRCd.
|
||||
- Implement user mode "R": indicates that the nick name of this user
|
||||
- Implement user mode "R": indicates that the nickname of this user
|
||||
is "registered". This mode isn't handled by ngIRCd itself, but must
|
||||
be set and unset by IRC services like Anope.
|
||||
- Implement channel mode "R": only registered users (having the user
|
||||
@@ -72,11 +535,11 @@ ngIRCd Release 19
|
||||
- Handle channel user modes 'a', 'h', and 'q' from remote servers.
|
||||
These channel user modes aren't used for anything at the moment,
|
||||
but ngIRCd knows that these three modes are "channel user modes"
|
||||
and not "channel modes", that is that these modes take an "nick name"
|
||||
and not "channel modes", that is that these modes take an "nickname"
|
||||
argument. Like unknown user and channel modes, these modes are saved
|
||||
and forwarded to other servers, but ignored otherwise.
|
||||
|
||||
ngIRCd Release 18 (2011-07-10)
|
||||
ngIRCd 18 (2011-07-10)
|
||||
|
||||
- Add preliminary ngIRCd protocol module for Anope 1.9 to contrib/Anope/.
|
||||
|
||||
@@ -128,10 +591,10 @@ ngIRCd Release 18 (2011-07-10)
|
||||
(booleans, text strings, integer numbers) and add type information to each
|
||||
variable description.
|
||||
- Terminate incoming connections on HTTP commands "GET" and "POST".
|
||||
- New configuration option "CloakHost": when set, this hostname is used for
|
||||
every client instead of the real DNS hostname (or IP address).
|
||||
- New configuration option "CloakHost": when set, this host name is used for
|
||||
every client instead of the real DNS host name (or IP address).
|
||||
- New configuration option "CloakUserToNick": when enabled, ngIRCd sets
|
||||
every clients' user name to their nick name and hides the user name
|
||||
every clients' user name to their nickname and hides the user name
|
||||
supplied by the IRC client.
|
||||
- Make write buffers bigger, but flush early. Before this change, a client
|
||||
got disconnected if the buffer flushing at 4k failed, now regular clients
|
||||
@@ -151,19 +614,19 @@ ngIRCd Release 18 (2011-07-10)
|
||||
vice-versa). The defaults are adjusted accordingly and the old variables
|
||||
in [Global] are still accepted, so there is no functional change.
|
||||
|
||||
ngIRCd Release 17.1 (2010-12-19)
|
||||
ngIRCd 17.1 (2010-12-19)
|
||||
|
||||
- Don't log critical (or worse) messages to stderr
|
||||
- Remove "error file" when compiled with debug code enabled
|
||||
- New numeric 329: get channel creation time on "MODE #chan" commands
|
||||
|
||||
ngIRCd Release 17 (2010-11-07)
|
||||
ngIRCd 17 (2010-11-07)
|
||||
|
||||
- doc: change path names in sample-ngircd.conf depending on sysconfdir
|
||||
|
||||
ngIRCd 17~rc2 (2010-10-25)
|
||||
- Generate ngIRCd version number from GIT tag.
|
||||
- Make sourcecode compatible with ansi2knr again. This allows to compile
|
||||
- Make source code compatible with ansi2knr again. This allows to compile
|
||||
ngIRCd using a pre-ANSI K&R C compiler again.
|
||||
|
||||
ngIRCd 17~rc1 (2010-10-11)
|
||||
@@ -172,7 +635,7 @@ ngIRCd Release 17 (2010-11-07)
|
||||
Howl, Avahi or on Mac OS X).
|
||||
- New configuration option "SyslogFacility" to define the syslog "facility"
|
||||
(the "target"), to which ngIRCd should send its log messages.
|
||||
Possible values are system dependant, but most probably "auth", "daemon",
|
||||
Possible values are system dependent, but most probably "auth", "daemon",
|
||||
"user" and "local1" through "local7" are possible values; see syslog(3).
|
||||
Default is "local5" for historical reasons.
|
||||
- Dump the "internal server state" (configured servers, established
|
||||
@@ -181,8 +644,8 @@ ngIRCd Release 17 (2010-11-07)
|
||||
- Enable the daemon to disable and enable "debug mode" on runtime using
|
||||
signal SIGUSR1, when debug code is compiled in, not only on startup
|
||||
using the command line parameters.
|
||||
- Implement user mode "x": hostname cloaking (closes: #102).
|
||||
- Change MOTD file handling: ngIRCd now caches the contens of the MOTD
|
||||
- Implement user mode "x": host name cloaking (closes: #102).
|
||||
- Change MOTD file handling: ngIRCd now caches the contents of the MOTD
|
||||
file, so the daemon now requires a HUP signal or REHASH command to
|
||||
re-read the MOTD file when its content changed.
|
||||
- Allow IRC ops to change channel modes even without OperServerMode set.
|
||||
@@ -195,10 +658,10 @@ ngIRCd Release 17 (2010-11-07)
|
||||
this new mode requires the user to be an IRC operator.
|
||||
- Show SSL status in WHOIS output, numeric 275.
|
||||
|
||||
ngIRCd Release 16 (2010-05-02)
|
||||
ngIRCd 16 (2010-05-02)
|
||||
|
||||
ngIRCd 16~rc2 (2010-04-25)
|
||||
- Enhace connection statistics counters: display total number of served
|
||||
- Enhance connection statistics counters: display total number of served
|
||||
connections on daemon shutdown and when a new client connects using
|
||||
the new numeric RPL_STATSCONN (250).
|
||||
|
||||
@@ -215,12 +678,12 @@ ngIRCd Release 16 (2010-05-02)
|
||||
every channel, and c) remote clients using a server not supporting this
|
||||
mode are not checked either and therefore always allowed to join.
|
||||
|
||||
ngIRCd Release 15 (2009-11-07)
|
||||
ngIRCd 15 (2009-11-07)
|
||||
|
||||
ngIRCd 15~rc1 (2009-10-15)
|
||||
- Do not add default listening port (6667) if SSL ports were specified, so
|
||||
ngIRCd can be configured to only accept SSL-encrypted connections now.
|
||||
- Enable IRC operators to use the IRC command SQUIT (insted of the already
|
||||
- Enable IRC operators to use the IRC command SQUIT (instead of the already
|
||||
implemented but non-standard DISCONNECT command).
|
||||
- New configuration option "AllowRemoteOper" (disabled by default) that
|
||||
enables remote IRC operators to use the IRC commands SQUIT and CONNECT
|
||||
@@ -229,13 +692,13 @@ ngIRCd Release 15 (2009-11-07)
|
||||
a throttling scheme: an IRC client can send up to 3 commands or 256 bytes
|
||||
per second before a one second pause is enforced.
|
||||
|
||||
ngIRCd Release 14.1 (2009-05-05)
|
||||
ngIRCd 14.1 (2009-05-05)
|
||||
|
||||
- Security: fix remotely triggerable crash in SSL/TLS code.
|
||||
- Debian: build ngircd-full-dbg package.
|
||||
- Allow ping timeout quit messages to show the timeout value.
|
||||
|
||||
ngIRCd Release 14 (2009-04-20)
|
||||
ngIRCd 14 (2009-04-20)
|
||||
|
||||
ngIRCd 14~rc1 (2009-03-29)
|
||||
- Allow creation of persistent modeless channels.
|
||||
@@ -246,7 +709,7 @@ ngIRCd Release 14 (2009-04-20)
|
||||
individual channel keys for different users.
|
||||
- Remove limit on maximum number of predefined channels in ngircd.conf.
|
||||
|
||||
ngIRCd Release 13 (2008-12-25)
|
||||
ngIRCd 13 (2008-12-25)
|
||||
|
||||
ngIRCd 13~rc1 (2008-11-21):
|
||||
- New version number scheme :-)
|
||||
@@ -286,7 +749,7 @@ ngIRCd 0.12.0 (2008-05-13)
|
||||
- Implemented IRC commands INFO, SUMMON (dummy), and USERS (dummy) and
|
||||
enhanced test suite to check these commands. (Dana Dahlstrom)
|
||||
- IRC_WHO now supports search patterns and will test this against user
|
||||
nickname/servername/hostname, etc. as required by RFC 2812, Section 3.6.1.
|
||||
nickname/server name/host name, etc. as required by RFC 2812, Section 3.6.1.
|
||||
(reported by Dana Dahlstrom)
|
||||
- Implement RFC 2812 handling of "0" argument to 'JOIN': must be treated
|
||||
as if the user had sent PART commands for all channels the user is a
|
||||
@@ -299,7 +762,7 @@ ngIRCd 0.11.0 (2008-01-15)
|
||||
- New [Server] configuration Option "Bind" allows to specify
|
||||
the source IP address to use when connecting to remote server.
|
||||
- New configuration option "MaxNickLength" to specify the allowed maximum
|
||||
length of user nick names. Note: must be unique in an IRC network!
|
||||
length of user nicknames. Note: must be unique in an IRC network!
|
||||
- Numeric 317: implemented "signon time" (displayed in WHOIS result).
|
||||
- Added new server configuration option "Passive" for "Server" blocks to
|
||||
disable automatic outgoing connections (similar to -p option to ngircd,
|
||||
@@ -378,7 +841,7 @@ ngIRCd 0.7.5 (2003-07-11)
|
||||
(DoS), the default is 5 connections per client IP.
|
||||
- Added new configuration variable "Listen" to bind all listening
|
||||
sockets of the server to a single IP address.
|
||||
|
||||
|
||||
ngIRCd 0.7.1 (2003-07-18)
|
||||
|
||||
- Added support for GNU/Hurd.
|
||||
@@ -403,9 +866,9 @@ ngIRCd 0.7.0 (2003-05-01)
|
||||
- Documentation is now installed in $(datadir)/doc/ngircd.
|
||||
|
||||
|
||||
Older news (sorry, only available in german language):
|
||||
Older news (sorry, only available in German language):
|
||||
|
||||
ngIRCd 0.6.0, 2002-12-24
|
||||
ngIRCd 0.6.0, 24.12.2002
|
||||
|
||||
- beim Schliessen einer Verbindung zeigt der Server nun vor dem ERROR
|
||||
noch eine Statistik ueber die empfangene und gesendete Datenmenge an.
|
||||
|
90
README
90
README
@@ -1,90 +0,0 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2012 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- README --
|
||||
|
||||
|
||||
I. Introduction
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
ngIRCd is an Open Source server for the Internet Relay Chat (IRC), which
|
||||
is developed and published under the terms of the GNU General Public
|
||||
Licence, see the file COPYING for details. ngIRCd means "next generation
|
||||
IRC daemon" (which is a little bit exaggerated, "lightweight Internet Relay
|
||||
Chat server" would be better), it's written from scratch and not deduced
|
||||
from the "grandfather of IRC daemons", the daemon of the IRCNet.
|
||||
|
||||
Please see the INSTALL document for installation and upgrade information!
|
||||
|
||||
|
||||
II. Status
|
||||
~~~~~~~~~~~
|
||||
|
||||
It is not the goal of ngIRCd to implement all the nasty behaviours of the
|
||||
original ircd, but to implement most of the useful commands and semantics
|
||||
specified by the RFCs.
|
||||
|
||||
In the meantime ngIRCd should be quite feature complete and stable to be
|
||||
used in real IRC networks.
|
||||
|
||||
Implemented IRC-commands are:
|
||||
|
||||
ADMIN, AWAY, CHANINFO, CONNECT, DIE, DISCONNECT, ERROR, GLINE, HELP, INFO,
|
||||
INVITE, ISON, JOIN, KICK, KILL, KLINE, LINKS, LIST, LUSERS, MODE, MOTD,
|
||||
NAMES, NICK, NJOIN, NOTICE, OPER, PART, PASS, PING, PONG, PRIVMSG, QUIT,
|
||||
REHASH, RESTART, SERVER, SERVICE, SERVLIST, SQUERY, SQUIT, STATS, SUMMON,
|
||||
TIME, TOPIC, TRACE, USER, USERHOST, USERS, VERSION, WALLOPS, WEBIRC, WHO,
|
||||
WHOIS, WHOWAS.
|
||||
|
||||
III. Features (or: why use ngIRCd?)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- well arranged (lean) configuration file
|
||||
- simple to build/install, configure and maintain
|
||||
- supports IPv6 and SSL
|
||||
- no problems with servers that have dynamic IP addresses
|
||||
- freely available, modern, portable and tidy C-source
|
||||
- wide field of supported platforms, including AIX, A/UX, FreeBSD, HP-UX,
|
||||
IRIX, Linux, Mac OS X, NetBSD, OpenBSD, Solaris, and Windows with Cygwin.
|
||||
- ngIRCd is being actively developed since 2001.
|
||||
|
||||
|
||||
IV. Documentation
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
More documentation can be found in the "doc/" directory and the homepage of
|
||||
the ngIRCd: <http://ngircd.barton.de/>.
|
||||
|
||||
|
||||
V. Download
|
||||
~~~~~~~~~~~
|
||||
|
||||
The homepage of the ngIRCd is: <http://ngircd.barton.de/>; you will find
|
||||
the newest information about the ngIRCd and the most recent ("stable")
|
||||
releases there.
|
||||
|
||||
If you are interested in the latest development versions (which are not
|
||||
always stable), then please read the section about "GIT" on the homepage and
|
||||
the file "doc/GIT.txt" which describes the use of GIT, the version control
|
||||
system used by ngIRCd (homepage: http://git-scm.com/).
|
||||
|
||||
|
||||
VI. Bugs
|
||||
~~~~~~~~
|
||||
|
||||
If you find bugs in the ngIRCd (which might be there :-), please report
|
||||
them at the following URL:
|
||||
|
||||
<http://ngircd.barton.de/bugtracker.php>
|
||||
|
||||
There you can read about known bugs and limitations, too.
|
||||
|
||||
If you have critics, patches or something else, please feel free to post a
|
||||
mail to the ngIRCd mailing list: <ngircd-ml@arthur.barton.de> (please see
|
||||
<http://ngircd.barton.de/support.php#ml> for details) or join the ngIRCd
|
||||
IRC channel: <irc://irc.barton.de/ngircd>.
|
78
README.md
Normal file
78
README.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# [ngIRCd](https://ngircd.barton.de) - Internet Relay Chat Server
|
||||
|
||||
## Introduction
|
||||
|
||||
*ngIRCd* is a free, portable and lightweight *Internet Relay Chat* ([IRC])
|
||||
server for small or private networks, developed under the terms of the GNU
|
||||
General Public License ([GPL]); please see the file `COPYING` for licensing
|
||||
information.
|
||||
|
||||
The server is quite easy to configure, can handle dynamic IP addresses, and
|
||||
optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for
|
||||
user authentication as well as character set conversion for legacy clients. The
|
||||
server has been written from scratch and is not based on the "forefather", the
|
||||
daemon of the IRCNet.
|
||||
|
||||
The name ngIRCd means *next-generation IRC daemon*, which is a little bit
|
||||
exaggerated: *lightweight Internet Relay Chat server* most probably would have
|
||||
been a better name :-)
|
||||
|
||||
Please see the `INSTALL.md` document for installation and upgrade information,
|
||||
online available here: <https://ngircd.barton.de/doc/INSTALL.md>!
|
||||
|
||||
## Status
|
||||
|
||||
ngIRCd should be quite feature-complete and stable to be used as a daemon in
|
||||
real-world IRC networks.
|
||||
|
||||
It is not the goal of ngIRCd to implement all the nasty behaviors of the
|
||||
original ircd, but to implement most of the useful commands and semantics
|
||||
specified by the RFCs that are used by existing clients.
|
||||
|
||||
## Features (or: why use ngIRCd?)
|
||||
|
||||
- Well arranged (lean) configuration file.
|
||||
- Simple to build, install, configure, and maintain.
|
||||
- Supports IPv6 and SSL.
|
||||
- Can use PAM for user authentication.
|
||||
- Lots of popular user and channel modes are implemented.
|
||||
- Supports "cloaking" of users.
|
||||
- No problems with servers that have dynamic IP addresses.
|
||||
- Freely available, modern, portable and tidy C source.
|
||||
- Wide field of supported platforms, including AIX, A/UX, FreeBSD, HP-UX,
|
||||
IRIX, Linux, macOS, NetBSD, OpenBSD, Solaris, and Windows with Cygwin.
|
||||
- ngIRCd is being actively developed since 2001.
|
||||
|
||||
## Documentation
|
||||
|
||||
The **homepage** of the ngIRCd project is <https://ngircd.barton.de>.
|
||||
|
||||
More documentation can be found in the `doc/` directory and
|
||||
[online](https://ngircd.barton.de/documentation).
|
||||
|
||||
## Downloads & Source Code
|
||||
|
||||
You can find the latest information about the ngIRCd and the most recent
|
||||
stable release on the [news](https://ngircd.barton.de/news) and
|
||||
[downloads](https://ngircd.barton.de/download) pages of the homepage.
|
||||
|
||||
Visit our source code repository at [GitHub](https://github.com) if you are
|
||||
interested in the latest development code: <https://github.com/ngircd/ngircd>.
|
||||
|
||||
## Problems, Bugs, Patches
|
||||
|
||||
Please don't hesitate to contact us if you encounter problems:
|
||||
|
||||
- On IRC: <irc://irc.barton.de/ngircd>
|
||||
- Via the mailing list: <ngircd-ml@ngircd.barton.de>
|
||||
|
||||
See <http://ngircd.barton.de/support> for details.
|
||||
|
||||
If you find any bugs in ngIRCd (which most probably will be there ...), please
|
||||
report them to our issue tracker at GitHub:
|
||||
|
||||
- Bug tracker: <https://github.com/ngircd/ngircd/issues>
|
||||
- Patches, "pull requests": <https://github.com/ngircd/ngircd/pulls>
|
||||
|
||||
[IRC]: https://wikipedia.org/wiki/Internet_Relay_Chat
|
||||
[GPL]: https://wikipedia.org/wiki/GNU_General_Public_License
|
116
autogen.sh
116
autogen.sh
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2008 Alexander Barton <alex@barton.de>
|
||||
# Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# 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
|
||||
@@ -16,6 +16,11 @@
|
||||
# GNU autoconf. It tries to be smart in finding the correct/usable/available
|
||||
# installed versions of these tools on your system.
|
||||
#
|
||||
# In addition, it enables or disables the "de-ANSI-fication" support of GNU
|
||||
# automake, which is supported up to autoconf 1.11.x an has been removed
|
||||
# in automake 1.12 -- make sure to use a version of automake supporting it
|
||||
# when generating distribution archives!
|
||||
#
|
||||
# The following strategy is used for each of aclocal, autoheader, automake,
|
||||
# and autoconf: first, "tool" (the regular name of the tool, e. g. "autoconf"
|
||||
# or "automake") is checked. If this fails, "tool<major><minor>" (for example
|
||||
@@ -68,8 +73,12 @@ Search()
|
||||
for name in $searchlist; do
|
||||
$EXIST "${name}" >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "${name}"
|
||||
return 0
|
||||
"${name}" --version 2>&1 \
|
||||
| grep -v "environment variable" >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "${name}"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -86,7 +95,7 @@ Search()
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
minor=`expr $minor - 1`
|
||||
minor=$(expr $minor - 1)
|
||||
done
|
||||
return 1
|
||||
}
|
||||
@@ -94,10 +103,17 @@ Search()
|
||||
Notfound()
|
||||
{
|
||||
echo "Error: $* not found!"
|
||||
echo "Please install recent versions of GNU autoconf and GNU automake."
|
||||
echo 'Please install supported versions of GNU autoconf, GNU automake'
|
||||
echo 'and pkg-config: see the INSTALL file for details.'
|
||||
exit 1
|
||||
}
|
||||
|
||||
Run()
|
||||
{
|
||||
[ "$VERBOSE" = "1" ] && echo " - running \"$*\" ..."
|
||||
"$@"
|
||||
}
|
||||
|
||||
# Reset locale settings to suppress warning messages of Perl
|
||||
unset LC_ALL
|
||||
unset LANG
|
||||
@@ -123,43 +139,91 @@ fi
|
||||
|
||||
# Try to detect the needed tools when no environment variable already
|
||||
# specifies one:
|
||||
echo "Searching tools ..."
|
||||
[ -z "$ACLOCAL" ] && ACLOCAL=`Search aclocal 1`
|
||||
[ "$VERBOSE" = "1" ] && echo "ACLOCAL=$ACLOCAL"
|
||||
[ -z "$AUTOHEADER" ] && AUTOHEADER=`Search autoheader 2`
|
||||
[ "$VERBOSE" = "1" ] && echo "AUTOHEADER=$AUTOHEADER"
|
||||
[ -z "$AUTOMAKE" ] && AUTOMAKE=`Search automake 1`
|
||||
[ "$VERBOSE" = "1" ] && echo "AUTOMAKE=$AUTOMAKE"
|
||||
[ -z "$AUTOCONF" ] && AUTOCONF=`Search autoconf 2`
|
||||
[ "$VERBOSE" = "1" ] && echo "AUTOCONF=$AUTOCONF"
|
||||
echo "Searching for required tools ..."
|
||||
[ -z "$ACLOCAL" ] && ACLOCAL=$(Search aclocal 1)
|
||||
[ "$VERBOSE" = "1" ] && echo " - ACLOCAL=$ACLOCAL"
|
||||
[ -z "$AUTOHEADER" ] && AUTOHEADER=$(Search autoheader 2)
|
||||
[ "$VERBOSE" = "1" ] && echo " - AUTOHEADER=$AUTOHEADER"
|
||||
[ -z "$AUTOMAKE" ] && AUTOMAKE=$(Search automake 1)
|
||||
[ "$VERBOSE" = "1" ] && echo " - AUTOMAKE=$AUTOMAKE"
|
||||
[ -z "$AUTOCONF" ] && AUTOCONF=$(Search autoconf 2)
|
||||
[ "$VERBOSE" = "1" ] && echo " - AUTOCONF=$AUTOCONF"
|
||||
|
||||
# Call ./configure when parameters have been passed to this script and
|
||||
# GO isn't already defined.
|
||||
[ -z "$GO" -a $# -gt 0 ] && GO=1
|
||||
AUTOCONF_VERSION=$(echo "$AUTOCONF" | cut -d'-' -f2-)
|
||||
[ -n "$AUTOCONF_VERSION" ] && [ "$AUTOCONF_VERSION" != "autoconf" ] \
|
||||
&& export AUTOCONF_VERSION || unset AUTOCONF_VERSION
|
||||
[ "$VERBOSE" = "1" ] && echo " - AUTOCONF_VERSION=$AUTOCONF_VERSION"
|
||||
AUTOMAKE_VERSION=$(echo $AUTOMAKE | cut -d'-' -f2-)
|
||||
[ -n "$AUTOMAKE_VERSION" ] && [ "$AUTOMAKE_VERSION" != "automake" ] \
|
||||
&& export AUTOMAKE_VERSION || unset AUTOMAKE_VERSION
|
||||
[ "$VERBOSE" = "1" ] && echo " - AUTOMAKE_VERSION=$AUTOMAKE_VERSION"
|
||||
|
||||
[ $# -gt 0 ] && CONFIGURE_ARGS=" $*" || CONFIGURE_ARGS=""
|
||||
[ -z "$GO" ] && [ -n "$CONFIGURE_ARGS" ] && GO=1
|
||||
|
||||
# Verify that all tools have been found
|
||||
command -v pkg-config >/dev/null || Notfound pkg-config
|
||||
[ -z "$ACLOCAL" ] && Notfound aclocal
|
||||
[ -z "$AUTOHEADER" ] && Notfound autoheader
|
||||
[ -z "$AUTOMAKE" ] && Notfound automake
|
||||
[ -z "$AUTOCONF" ] && Notfound autoconf
|
||||
|
||||
AM_VERSION=$($AUTOMAKE --version | head -n 1 | sed -e 's/.* //g')
|
||||
ifs=$IFS; IFS="."; set $AM_VERSION; IFS=$ifs
|
||||
AM_MAJOR="$1"; AM_MINOR="$2"
|
||||
echo "Detected automake $AM_VERSION ..."
|
||||
|
||||
AM_MAKEFILES="src/ipaddr/Makefile.ng src/ngircd/Makefile.ng src/testsuite/Makefile.ng src/tool/Makefile.ng"
|
||||
|
||||
# De-ANSI-fication?
|
||||
if [ "$AM_MAJOR" -eq "1" ] && [ "$AM_MINOR" -lt "12" ]; then
|
||||
# automake < 1.12 => automatic de-ANSI-fication support available
|
||||
echo " - Enabling de-ANSI-fication support."
|
||||
sed -e "s|^__ng_PROTOTYPES__|AM_C_PROTOTYPES|g" configure.ng >configure.ac
|
||||
DEANSI_START=""
|
||||
DEANSI_END=""
|
||||
else
|
||||
# automake >= 1.12 => no de-ANSI-fication support available
|
||||
echo " - Disabling de-ANSI-fication support."
|
||||
sed -e "s|^__ng_PROTOTYPES__|AC_C_PROTOTYPES|g" configure.ng >configure.ac
|
||||
DEANSI_START="#"
|
||||
DEANSI_END=" (disabled by ./autogen.sh script)"
|
||||
fi
|
||||
# Serial test harness?
|
||||
if [ "$AM_MAJOR" -eq "1" ] && [ "$AM_MINOR" -ge "13" ]; then
|
||||
# automake >= 1.13 => enforce "serial test harness"
|
||||
echo " - Enforcing serial test harness."
|
||||
SERIAL_TESTS="serial-tests"
|
||||
else
|
||||
# automake < 1.13 => no new test harness, nothing to do
|
||||
# shellcheck disable=SC2034
|
||||
SERIAL_TEST=""
|
||||
fi
|
||||
|
||||
sed -e "s|^__ng_Makefile_am_template__|AUTOMAKE_OPTIONS = ${SERIAL_TESTS} ${DEANSI_START}ansi2knr${DEANSI_END}|g" \
|
||||
src/portab/Makefile.ng >src/portab/Makefile.am
|
||||
for makefile_ng in $AM_MAKEFILES; do
|
||||
makefile_am=$(echo "$makefile_ng" | sed -e "s|\.ng\$|\.am|g")
|
||||
sed -e "s|^__ng_Makefile_am_template__|AUTOMAKE_OPTIONS = ${SERIAL_TESTS} ${DEANSI_START}../portab/ansi2knr${DEANSI_END}|g" \
|
||||
$makefile_ng >$makefile_am
|
||||
done
|
||||
|
||||
export ACLOCAL AUTOHEADER AUTOMAKE AUTOCONF
|
||||
|
||||
# Generate files
|
||||
echo "Generating files ..."
|
||||
$ACLOCAL && \
|
||||
$AUTOHEADER && \
|
||||
$AUTOMAKE --add-missing && \
|
||||
$AUTOCONF --force
|
||||
echo "Generating files using \"$AUTOCONF\" and \"$AUTOMAKE\" ..."
|
||||
Run $ACLOCAL && \
|
||||
Run $AUTOCONF && \
|
||||
Run $AUTOHEADER && \
|
||||
Run $AUTOMAKE --add-missing --no-force
|
||||
|
||||
if [ $? -eq 0 -a -x ./configure ]; then
|
||||
if [ $? -eq 0 ] && [ -x ./configure ]; then
|
||||
# Success: if we got some parameters we call ./configure and pass
|
||||
# all of them to it.
|
||||
NAME=`grep PACKAGE_STRING= configure | cut -d"'" -f2`
|
||||
NAME=$(grep PACKAGE_STRING= configure | cut -d"'" -f2)
|
||||
if [ "$GO" = "1" ]; then
|
||||
[ -n "$PREFIX" ] && p=" --prefix=$PREFIX" || p=""
|
||||
[ -n "$*" ] && a=" $*" || a=""
|
||||
c="./configure${p}${a}"
|
||||
c="./configure${p}${CONFIGURE_ARGS}"
|
||||
echo "Okay, autogen.sh for $NAME done."
|
||||
echo "Calling \"$c\" ..."
|
||||
$c
|
||||
|
1354
config.guess
vendored
Normal file → Executable file
1354
config.guess
vendored
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
2689
config.sub
vendored
Normal file → Executable file
2689
config.sub
vendored
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# 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
|
||||
@@ -9,75 +9,123 @@
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
#
|
||||
|
||||
define(VERSION_ID,esyscmd(git describe|sed -e 's/rel-//g'|sed -e 's/-/~/'|tr -d \\n))
|
||||
define(VERSION_ID,esyscmd([
|
||||
V=`git describe 2>/dev/null | sed -e 's/rel-//g' | sed -e 's/-/~/'`;
|
||||
[ -z "$V" -a -r configure ] \
|
||||
&& V=`grep "PACKAGE_STRING=" configure | cut -d"'" -f2 | cut -d' ' -f2`
|
||||
( [ -n "$V" ] && echo "$V" || echo "??" ) | tr -d '\n';
|
||||
]))
|
||||
|
||||
m4_ifdef([AM_SILENT_RULES],
|
||||
[m4_define([ng_color_tests], [color-tests])],
|
||||
[m4_define([ng_color_tests], [])])
|
||||
|
||||
# -- Initialisation --
|
||||
|
||||
AC_PREREQ(2.50)
|
||||
AC_INIT(ngircd, VERSION_ID)
|
||||
AC_CONFIG_SRCDIR(src/ngircd/ngircd.c)
|
||||
AC_CANONICAL_TARGET
|
||||
AM_INIT_AUTOMAKE(1.6)
|
||||
AM_CONFIG_HEADER(src/config.h)
|
||||
AC_PREREQ([2.61])
|
||||
AC_INIT([ngIRCd],[VERSION_ID],[ngircd-ml@ngircd.barton.de],[ngircd],[http://ngircd.barton.de/])
|
||||
|
||||
AC_CONFIG_SRCDIR([src/ngircd/ngircd.c])
|
||||
AC_CONFIG_HEADER([src/config.h])
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
AM_INIT_AUTOMAKE([-Wall 1.10 foreign ]ng_color_tests)
|
||||
|
||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||
|
||||
# -- Templates for config.h --
|
||||
|
||||
AH_TEMPLATE([DEBUG], [Define if debug-mode should be enabled])
|
||||
AH_TEMPLATE([HAVE_sockaddr_in_len], [Define if sockaddr_in.sin_len exists])
|
||||
AH_TEMPLATE([HAVE_socklen_t], [Define if socklen_t exists])
|
||||
AH_TEMPLATE([ICONV], [Define if libiconv can be used, e.g. for CHARCONV])
|
||||
AH_TEMPLATE([IDENTAUTH], [Define if the server should do IDENT requests])
|
||||
AH_TEMPLATE([IRCPLUS], [Define if IRC+ protocol should be used])
|
||||
AH_TEMPLATE([PAM], [Define if PAM should be used])
|
||||
AH_TEMPLATE([SNIFFER], [Define if IRC sniffer should be enabled])
|
||||
AH_TEMPLATE([STRICT_RFC], [Define if ngIRCd should behave strict RFC compliant])
|
||||
AH_TEMPLATE([SYSLOG], [Define if syslog should be used for logging])
|
||||
AH_TEMPLATE([ZLIB], [Define if zlib compression should be enabled])
|
||||
AH_TEMPLATE([TCPWRAP], [Define if TCP wrappers should be used])
|
||||
AH_TEMPLATE([IRCPLUS], [Define if IRC+ protocol should be used])
|
||||
AH_TEMPLATE([WANT_IPV6], [Define if IPV6 protocol should be enabled])
|
||||
AH_TEMPLATE([IDENTAUTH], [Define if the server should do IDENT requests])
|
||||
AH_TEMPLATE([PAM], [Define if PAM should be used])
|
||||
AH_TEMPLATE([HAVE_sockaddr_in_len], [Define if sockaddr_in.sin_len exists])
|
||||
AH_TEMPLATE([ZLIB], [Define if zlib compression should be enabled])
|
||||
|
||||
AH_TEMPLATE([TARGET_OS], [Target operating system name])
|
||||
AH_TEMPLATE([TARGET_VENDOR], [Target system vendor])
|
||||
AH_TEMPLATE([TARGET_CPU], [Target CPU name])
|
||||
AH_TEMPLATE([HOST_OS], [Target operating system name])
|
||||
AH_TEMPLATE([HOST_VENDOR], [Target system vendor])
|
||||
AH_TEMPLATE([HOST_CPU], [Target CPU name])
|
||||
|
||||
# -- C Compiler --
|
||||
|
||||
AC_PROG_CC
|
||||
AC_PROG_CC_STDC
|
||||
AC_C_PROTOTYPES
|
||||
|
||||
# -- Helper programs --
|
||||
|
||||
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
||||
|
||||
AC_PROG_AWK
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_LN_S
|
||||
AC_PROG_MAKE_SET
|
||||
AC_PROG_MKDIR_P
|
||||
AC_PROG_RANLIB
|
||||
|
||||
# -- Compiler Features --
|
||||
|
||||
AM_C_PROTOTYPES
|
||||
AC_C_CONST
|
||||
AC_C_INLINE
|
||||
__ng_PROTOTYPES__
|
||||
|
||||
# -- Hard coded system and compiler dependencies/features/options ... --
|
||||
# -- Function Definitions --
|
||||
|
||||
AC_DEFUN([GCC_STACK_PROTECT_CC],[
|
||||
ssp_cc=yes
|
||||
# we use -fstack-protector-all for the test to enfoce the use of the guard variable
|
||||
AC_MSG_CHECKING([whether ${CC} accepts -fstack-protector])
|
||||
ssp_old_cflags="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -fstack-protector-all"
|
||||
AC_TRY_LINK(,,, ssp_cc=no)
|
||||
echo $ssp_cc
|
||||
CFLAGS="$ssp_old_cflags"
|
||||
if test "X$ssp_cc" = "Xyes"; then
|
||||
CFLAGS="$CFLAGS -fstack-protector"
|
||||
AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.])
|
||||
fi
|
||||
ssp_cc=yes
|
||||
# Use -fstack-protector-all for the test to enfoce the use of the
|
||||
# guard variable
|
||||
AC_MSG_CHECKING([whether ${CC} accepts -fstack-protector])
|
||||
ssp_old_cflags="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -fstack-protector-all"
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],[],[ssp_cc=no])
|
||||
echo $ssp_cc
|
||||
CFLAGS="$ssp_old_cflags"
|
||||
if test "X$ssp_cc" = "Xyes"; then
|
||||
CFLAGS="$CFLAGS -fstack-protector"
|
||||
AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.])
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([WORKING_GETADDRINFO],[
|
||||
AC_CHECK_FUNCS([getaddrinfo],[
|
||||
AC_MSG_CHECKING([whether getaddrinfo() works])
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netdb.h>
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
struct addrinfo hints, *ai;
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_flags = AI_PASSIVE;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
hints.ai_family = PF_UNSPEC;
|
||||
if(getaddrinfo(NULL, "0", &hints, &ai) != 0)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
]])],[
|
||||
AC_DEFINE([HAVE_WORKING_GETADDRINFO], 1, [getaddrinfo(0)])
|
||||
AC_MSG_RESULT(yes)
|
||||
],[
|
||||
AC_MSG_RESULT(no)
|
||||
],[
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
])
|
||||
])
|
||||
|
||||
# -- Hard coded system and compiler dependencies/features/options ... --
|
||||
|
||||
if test "$GCC" = "yes"; then
|
||||
# We are using the GNU C compiler. Good!
|
||||
CFLAGS="$CFLAGS -pipe -W -Wall -Wpointer-arith -Wstrict-prototypes"
|
||||
@@ -85,7 +133,7 @@ if test "$GCC" = "yes"; then
|
||||
GCC_STACK_PROTECT_CC
|
||||
fi
|
||||
|
||||
case "$target_os" in
|
||||
case "$host_os" in
|
||||
hpux*)
|
||||
# This is HP/UX, we need to define _XOPEN_SOURCE_EXTENDED
|
||||
# (tested with HP/UX 11.11)
|
||||
@@ -96,76 +144,135 @@ esac
|
||||
# Add additional CFLAGS, eventually specified on the command line:
|
||||
test -n "$CFLAGS_ADD" && CFLAGS="$CFLAGS $CFLAGS_ADD"
|
||||
|
||||
CFLAGS="$CFLAGS -DSYSCONFDIR='\"\$(sysconfdir)\"'"
|
||||
CFLAGS="$CFLAGS -DSYSCONFDIR='\"\$(sysconfdir)\"' -DDOCDIR='\"\$(docdir)\"'"
|
||||
|
||||
# -- Headers --
|
||||
|
||||
AC_HEADER_STDC
|
||||
AC_HEADER_TIME
|
||||
AC_HEADER_SYS_WAIT
|
||||
AC_HEADER_TIME
|
||||
|
||||
# Required header files
|
||||
AC_CHECK_HEADERS([ \
|
||||
ctype.h errno.h fcntl.h netdb.h netinet/in.h netinet/in_systm.h \
|
||||
stdlib.h string.h strings.h sys/socket.h sys/time.h unistd.h \
|
||||
fcntl.h \
|
||||
netdb.h \
|
||||
netinet/in.h \
|
||||
stdlib.h \
|
||||
string.h \
|
||||
strings.h \
|
||||
sys/socket.h \
|
||||
sys/time.h \
|
||||
sys/types.h \
|
||||
unistd.h \
|
||||
],,AC_MSG_ERROR([required C header missing!]))
|
||||
|
||||
AC_CHECK_HEADERS([ \
|
||||
arpa/inet.h ctype.h malloc.h netinet/ip.h stdbool.h stddef.h varargs.h \
|
||||
],[],[],[[
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_SOCKET_H
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_IN_H
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
]]
|
||||
)
|
||||
# Optional header files
|
||||
AC_CHECK_HEADERS_ONCE([ \
|
||||
arpa/inet.h \
|
||||
inttypes.h \
|
||||
malloc.h \
|
||||
netinet/in_systm.h \
|
||||
netinet/ip.h \
|
||||
stdbool.h \
|
||||
stddef.h \
|
||||
stdint.h \
|
||||
varargs.h \
|
||||
])
|
||||
|
||||
# -- Datatypes --
|
||||
|
||||
AC_MSG_CHECKING(whether socklen_t exists)
|
||||
AC_TRY_COMPILE([
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
],[
|
||||
]],[[
|
||||
socklen_t a, b;
|
||||
a = 2; b = 4; a += b;
|
||||
],[
|
||||
]])],[
|
||||
AC_DEFINE(HAVE_socklen_t) AC_MSG_RESULT(yes)
|
||||
],[
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
|
||||
AC_TYPE_SIGNAL
|
||||
AC_TYPE_PID_T
|
||||
AC_TYPE_SIZE_T
|
||||
AC_TYPE_SSIZE_T
|
||||
AC_TYPE_UID_T
|
||||
AC_TYPE_UINT16_T
|
||||
AC_TYPE_UINT32_T
|
||||
AC_TYPE_UINT8_T
|
||||
|
||||
AC_CHECK_MEMBER([struct sockaddr_in.sin_len], AC_DEFINE(HAVE_sockaddr_in_len),,
|
||||
[#include <arpa/inet.h>])
|
||||
|
||||
# -- Libraries --
|
||||
|
||||
# A/UX needs this.
|
||||
AC_CHECK_LIB(UTIL,memmove)
|
||||
# needed on solaris. GNU libc also has a libnsl, but we do not need it.
|
||||
AC_SEARCH_LIBS(gethostbyname,nsl)
|
||||
AC_CHECK_LIB(socket,bind)
|
||||
# memmove: A/UX libUTIL
|
||||
AC_SEARCH_LIBS([memmove], [UTIL], [], [
|
||||
AC_MSG_ERROR([unable to find the memmove() function])
|
||||
])
|
||||
# gethostbyname: Solaris libnsl
|
||||
AC_SEARCH_LIBS([gethostbyname], [bind nsl network], [], [
|
||||
AC_MSG_ERROR([unable to find the gethostbyname() function])
|
||||
])
|
||||
# bind: SVR4 libsocket
|
||||
AC_SEARCH_LIBS([bind], [socket network], [], [
|
||||
AC_MSG_ERROR([unable to find the bind() function])
|
||||
])
|
||||
|
||||
# -- Functions --
|
||||
|
||||
AC_FUNC_FORK
|
||||
AC_FUNC_STRFTIME
|
||||
|
||||
# Required functions
|
||||
AC_CHECK_FUNCS([ \
|
||||
bind gethostbyaddr gethostbyname gethostname inet_ntoa \
|
||||
setsid setsockopt socket strcasecmp waitpid],,
|
||||
alarm \
|
||||
dup2 \
|
||||
endpwent \
|
||||
gethostbyaddr \
|
||||
gethostbyname \
|
||||
gethostname \
|
||||
gettimeofday \
|
||||
inet_ntoa \
|
||||
memmove \
|
||||
memset \
|
||||
setsid \
|
||||
socket \
|
||||
strcasecmp \
|
||||
strchr \
|
||||
strcspn \
|
||||
strerror \
|
||||
strncasecmp \
|
||||
strrchr \
|
||||
strspn \
|
||||
strstr \
|
||||
],,
|
||||
AC_MSG_ERROR([required function missing!]))
|
||||
|
||||
AC_CHECK_FUNCS([ \
|
||||
gai_strerror getaddrinfo getnameinfo inet_aton sigaction \
|
||||
sigprocmask snprintf vsnprintf strdup strlcpy strlcat strtok_r])
|
||||
# Optional functions
|
||||
AC_CHECK_FUNCS_ONCE([
|
||||
arc4random \
|
||||
arc4random_stir \
|
||||
gai_strerror \
|
||||
getnameinfo \
|
||||
inet_aton \
|
||||
setgroups \
|
||||
sigaction \
|
||||
sigprocmask \
|
||||
snprintf \
|
||||
strdup \
|
||||
strlcat \
|
||||
strlcpy \
|
||||
strndup \
|
||||
strsignal \
|
||||
strtok_r \
|
||||
unsetenv \
|
||||
vsnprintf \
|
||||
waitpid \
|
||||
])
|
||||
|
||||
WORKING_GETADDRINFO
|
||||
|
||||
# -- Configuration options --
|
||||
|
||||
@@ -173,22 +280,20 @@ AC_CHECK_FUNCS([ \
|
||||
|
||||
x_syslog_on=no
|
||||
AC_ARG_WITH(syslog,
|
||||
[ --without-syslog disable syslog (autodetected by default)],
|
||||
AS_HELP_STRING([--without-syslog],
|
||||
[disable syslog (autodetected by default)]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
CPPFLAGS="-I$withval/include $CPPFLAGS"
|
||||
LDFLAGS="-L$withval/lib $LDFLAGS"
|
||||
fi
|
||||
AC_CHECK_LIB(be, syslog)
|
||||
AC_CHECK_FUNCS(syslog, x_syslog_on=yes,
|
||||
AC_SEARCH_LIBS([syslog], [be], [x_syslog_on=yes], [
|
||||
AC_MSG_ERROR([Can't enable syslog!])
|
||||
)
|
||||
])
|
||||
fi
|
||||
],
|
||||
[
|
||||
AC_CHECK_LIB(be, syslog)
|
||||
AC_CHECK_FUNCS(syslog, x_syslog_on=yes)
|
||||
[ AC_SEARCH_LIBS([syslog], [be], [x_syslog_on=yes])
|
||||
]
|
||||
)
|
||||
if test "$x_syslog_on" = "yes"; then
|
||||
@@ -200,7 +305,8 @@ fi
|
||||
|
||||
x_zlib_on=no
|
||||
AC_ARG_WITH(zlib,
|
||||
[ --without-zlib disable zlib compression (autodetected by default)],
|
||||
AS_HELP_STRING([--without-zlib],
|
||||
[disable zlib compression (autodetected by default)]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
@@ -227,7 +333,8 @@ fi
|
||||
x_io_backend=none
|
||||
|
||||
AC_ARG_WITH(select,
|
||||
[ --without-select disable select IO support (autodetected by default)],
|
||||
AS_HELP_STRING([--without-select],
|
||||
[disable select IO support (autodetected by default)]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
@@ -245,7 +352,8 @@ AC_ARG_WITH(select,
|
||||
)
|
||||
|
||||
AC_ARG_WITH(poll,
|
||||
[ --without-poll disable poll support (autodetected by default)],
|
||||
AS_HELP_STRING([--without-poll],
|
||||
[disable poll support (autodetected by default)]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
@@ -271,7 +379,8 @@ AC_ARG_WITH(poll,
|
||||
)
|
||||
|
||||
AC_ARG_WITH(devpoll,
|
||||
[ --without-devpoll disable /dev/poll IO support (autodetected by default)],
|
||||
AS_HELP_STRING([--without-devpoll],
|
||||
[disable /dev/poll IO support (autodetected by default)]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
@@ -288,7 +397,8 @@ AC_ARG_WITH(devpoll,
|
||||
)
|
||||
|
||||
AC_ARG_WITH(epoll,
|
||||
[ --without-epoll disable epoll IO support (autodetected by default)],
|
||||
AS_HELP_STRING([--without-epoll],
|
||||
[disable epoll IO support (autodetected by default)]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
@@ -306,7 +416,8 @@ AC_ARG_WITH(epoll,
|
||||
)
|
||||
|
||||
AC_ARG_WITH(kqueue,
|
||||
[ --without-kqueue disable kqueue IO support (autodetected by default)],
|
||||
AS_HELP_STRING([--without-kqueue],
|
||||
[disable kqueue IO support (autodetected by default)]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
@@ -346,16 +457,21 @@ fi
|
||||
# use SSL?
|
||||
|
||||
AC_ARG_WITH(openssl,
|
||||
[ --with-openssl enable SSL support using OpenSSL],
|
||||
AS_HELP_STRING([--with-openssl],
|
||||
[enable SSL support using OpenSSL]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
CPPFLAGS="-I$withval/include $CPPFLAGS"
|
||||
LDFLAGS="-L$withval/lib $LDFLAGS"
|
||||
fi
|
||||
AC_CHECK_LIB(crypto, BIO_s_mem)
|
||||
AC_CHECK_LIB(ssl, SSL_library_init)
|
||||
AC_CHECK_FUNCS(SSL_library_init, x_ssl_openssl=yes,
|
||||
PKG_CHECK_MODULES([OPENSSL], [libssl libcrypto],
|
||||
[LIBS="$LIBS $OPENSSL_LIBS" CFLAGS="$CFLAGS $OPENSSL_CFLAGS"
|
||||
AC_DEFINE(HAVE_LIBSSL, 1)],
|
||||
[AC_CHECK_LIB(crypto, BIO_s_mem)
|
||||
AC_CHECK_LIB(ssl, SSL_new)]
|
||||
)
|
||||
AC_CHECK_FUNCS(SSL_new, x_ssl_openssl=yes,
|
||||
AC_MSG_ERROR([Can't enable openssl])
|
||||
)
|
||||
fi
|
||||
@@ -363,7 +479,8 @@ AC_ARG_WITH(openssl,
|
||||
)
|
||||
|
||||
AC_ARG_WITH(gnutls,
|
||||
[ --with-gnutls enable SSL support using gnutls],
|
||||
AS_HELP_STRING([--with-gnutls],
|
||||
[enable SSL support using gnutls]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
@@ -389,11 +506,14 @@ if test "$x_ssl_openssl" = "yes"; then
|
||||
x_ssl_lib=openssl
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL(HAVE_SSL, [test $x_ssl_lib != "no"])
|
||||
|
||||
# use TCP wrappers?
|
||||
|
||||
x_tcpwrap_on=no
|
||||
AC_ARG_WITH(tcp-wrappers,
|
||||
[ --with-tcp-wrappers enable TCP wrappers support],
|
||||
AS_HELP_STRING([--with-tcp-wrappers],
|
||||
[enable TCP wrappers support]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
@@ -401,14 +521,18 @@ AC_ARG_WITH(tcp-wrappers,
|
||||
LDFLAGS="-L$withval/lib $LDFLAGS"
|
||||
fi
|
||||
AC_MSG_CHECKING(for hosts_access)
|
||||
saved_LIBS="$LIBS"
|
||||
LIBS="-lwrap $LIBS"
|
||||
AC_TRY_LINK([
|
||||
LIBS_END="-lwrap $LIBS_END"
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <tcpd.h>
|
||||
int allow_severity = 0;
|
||||
int deny_severity = 0;
|
||||
],[
|
||||
]],[[
|
||||
tcpd_warn("link test");
|
||||
],[
|
||||
]])],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(TCPWRAP, 1)
|
||||
x_tcpwrap_on=yes
|
||||
@@ -416,6 +540,7 @@ int deny_severity = 0;
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_ERROR([Can't enable TCP wrappers!])
|
||||
])
|
||||
LIBS="$saved_LIBS"
|
||||
fi
|
||||
]
|
||||
)
|
||||
@@ -424,7 +549,8 @@ int deny_severity = 0;
|
||||
|
||||
x_identauth_on=no
|
||||
AC_ARG_WITH(ident,
|
||||
[ --with-ident enable "IDENT" ("AUTH") protocol support],
|
||||
AS_HELP_STRING([--with-ident],
|
||||
[enable "IDENT" ("AUTH") protocol support]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
@@ -447,7 +573,8 @@ fi
|
||||
|
||||
x_pam_on=no
|
||||
AC_ARG_WITH(pam,
|
||||
[ --with-pam enable user authentication using PAM],
|
||||
AS_HELP_STRING([--with-pam],
|
||||
[enable user authentication using PAM]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
@@ -474,17 +601,47 @@ fi
|
||||
|
||||
x_ircplus_on=yes
|
||||
AC_ARG_ENABLE(ircplus,
|
||||
[ --disable-ircplus disable IRC+ protocol],
|
||||
AS_HELP_STRING([--disable-ircplus],
|
||||
[disable IRC+ protocol]),
|
||||
if test "$enableval" = "no"; then x_ircplus_on=no; fi
|
||||
)
|
||||
if test "$x_ircplus_on" = "yes"; then
|
||||
AC_DEFINE(IRCPLUS, 1)
|
||||
|
||||
# Compile in iconv support?
|
||||
# We only check for it when IRC+ is enabled, because the IRC+ command
|
||||
# CHARCONV is the only function depending on it.
|
||||
x_iconv_on=no
|
||||
AC_ARG_WITH(iconv,
|
||||
AS_HELP_STRING([--with-iconv],
|
||||
[enable character conversion using libiconv]),
|
||||
[ if test "$withval" != "no"; then
|
||||
if test "$withval" != "yes"; then
|
||||
CFLAGS="-I$withval/include $CFLAGS"
|
||||
CPPFLAGS="-I$withval/include $CPPFLAGS"
|
||||
LDFLAGS="-L$withval/lib $LDFLAGS"
|
||||
fi
|
||||
AC_CHECK_LIB(iconv, iconv_open)
|
||||
AC_CHECK_FUNCS(iconv_open, x_iconv_on=yes)
|
||||
if test "$x_iconv_on" != "yes"; then
|
||||
AC_CHECK_LIB(iconv, libiconv_open)
|
||||
AC_CHECK_FUNCS(libiconv_open, x_iconv_on=yes)
|
||||
fi
|
||||
if test "$x_iconv_on" != "yes"; then
|
||||
AC_MSG_ERROR([Can't enable libiconv support!])
|
||||
fi
|
||||
fi ]
|
||||
)
|
||||
if test "$x_iconv_on" = "yes"; then
|
||||
AC_DEFINE(ICONV, 1)
|
||||
fi
|
||||
fi
|
||||
|
||||
# enable support for IPv6?
|
||||
x_ipv6_on=no
|
||||
AC_ARG_ENABLE(ipv6,
|
||||
[ --enable-ipv6 enable IPv6 protocol support],
|
||||
AS_HELP_STRING([--enable-ipv6],
|
||||
[enable IPv6 protocol support]),
|
||||
if test "$enableval" = "yes"; then x_ipv6_on=yes; fi
|
||||
)
|
||||
if test "$x_ipv6_on" = "yes"; then
|
||||
@@ -500,7 +657,8 @@ fi
|
||||
|
||||
x_sniffer_on=no; x_debug_on=no
|
||||
AC_ARG_ENABLE(sniffer,
|
||||
[ --enable-sniffer enable IRC traffic sniffer (enables debug mode)],
|
||||
AS_HELP_STRING([--enable-sniffer],
|
||||
[enable IRC traffic sniffer (enables debug mode)]),
|
||||
if test "$enableval" = "yes"; then
|
||||
AC_DEFINE(SNIFFER, 1)
|
||||
x_sniffer_on=yes; x_debug_on=yes
|
||||
@@ -510,7 +668,8 @@ AC_ARG_ENABLE(sniffer,
|
||||
# enable additional debugging code?
|
||||
|
||||
AC_ARG_ENABLE(debug,
|
||||
[ --enable-debug show additional debug output],
|
||||
AS_HELP_STRING([--enable-debug],
|
||||
[show additional debug output]),
|
||||
if test "$enableval" = "yes"; then x_debug_on=yes; fi
|
||||
)
|
||||
if test "$x_debug_on" = "yes"; then
|
||||
@@ -523,7 +682,8 @@ fi
|
||||
|
||||
x_strict_rfc_on=no
|
||||
AC_ARG_ENABLE(strict-rfc,
|
||||
[ --enable-strict-rfc strict RFC conformance -- may break clients!],
|
||||
AS_HELP_STRING([--enable-strict-rfc],
|
||||
[strict RFC conformance -- may break clients!]),
|
||||
if test "$enableval" = "yes"; then
|
||||
AC_DEFINE(STRICT_RFC, 1)
|
||||
x_strict_rfc_on=yes
|
||||
@@ -532,41 +692,47 @@ AC_ARG_ENABLE(strict-rfc,
|
||||
|
||||
# -- Definitions --
|
||||
|
||||
AC_DEFINE_UNQUOTED(TARGET_CPU, "$target_cpu" )
|
||||
AC_DEFINE_UNQUOTED(TARGET_VENDOR, "$target_vendor" )
|
||||
AC_DEFINE_UNQUOTED(TARGET_OS, "$target_os" )
|
||||
AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu" )
|
||||
AC_DEFINE_UNQUOTED(HOST_VENDOR, "$host_vendor" )
|
||||
AC_DEFINE_UNQUOTED(HOST_OS, "$host_os" )
|
||||
|
||||
# Add additional CFLAGS, eventually specified on the command line, but after
|
||||
# running this configure script. Useful for "-Werror" for example.
|
||||
# Add additional CFLAGS, LDFLAGS and LIBS which were specified on the command
|
||||
# line or by some tests from above, but after running this script. Useful for
|
||||
# adding "-Werror", for example:
|
||||
test -n "$CFLAGS_END" && CFLAGS="$CFLAGS $CFLAGS_END"
|
||||
test -n "$LDFLAGS_END" && LDFLAGS="$LDFLAGS $LDFLAGS_END"
|
||||
test -n "$LIBS_END" && LIBS="$LIBS $LIBS_END"
|
||||
|
||||
# -- Generate files --
|
||||
|
||||
AC_OUTPUT([ \
|
||||
AC_CONFIG_FILES([ \
|
||||
Makefile \
|
||||
doc/Makefile \
|
||||
doc/src/Makefile \
|
||||
src/Makefile \
|
||||
src/portab/Makefile \
|
||||
src/ipaddr/Makefile \
|
||||
src/tool/Makefile \
|
||||
src/ngircd/Makefile \
|
||||
src/testsuite/Makefile \
|
||||
man/Makefile \
|
||||
contrib/Makefile \
|
||||
contrib/Anope/Makefile \
|
||||
contrib/Debian/Makefile \
|
||||
contrib/MacOSX/Makefile \
|
||||
contrib/MacOSX/ngIRCd.xcodeproj/Makefile \
|
||||
contrib/MacOSX/ngIRCd.pmdoc/Makefile \
|
||||
contrib/MacOSX/ngIRCd.xcodeproj/Makefile \
|
||||
contrib/Makefile \
|
||||
doc/Makefile \
|
||||
doc/src/Makefile \
|
||||
man/Makefile \
|
||||
src/ipaddr/Makefile \
|
||||
src/Makefile \
|
||||
src/ngircd/Makefile \
|
||||
src/portab/Makefile \
|
||||
src/testsuite/Makefile \
|
||||
src/tool/Makefile \
|
||||
])
|
||||
|
||||
AC_OUTPUT
|
||||
|
||||
type dpkg >/dev/null 2>&1
|
||||
if test $? -eq 0; then
|
||||
# Generate debian/ link if the dpkg command exists
|
||||
# (read: if we are running on a debian compatible system)
|
||||
echo "creating Debian-specific links ..."
|
||||
test -f debian/rules || ln -s contrib/Debian debian
|
||||
if test ! -f debian/rules -a -f contrib/Debian/rules; then
|
||||
ln -s contrib/Debian debian
|
||||
fi
|
||||
fi
|
||||
|
||||
# -- Result --
|
||||
@@ -582,8 +748,7 @@ C=`eval echo ${sysconfdir}` ; C=`eval echo ${C}`
|
||||
M=`eval echo ${mandir}` ; M=`eval echo ${M}`
|
||||
D=`eval echo ${docdir}` ; D=`eval echo ${D}`
|
||||
|
||||
echo " Target: ${target}"
|
||||
test "$target" != "$host" && echo " Host: ${host}"
|
||||
echo " Host: ${host}"
|
||||
echo " Compiler: ${CC}"
|
||||
test -n "$CFLAGS" && echo " Compiler flags: ${CFLAGS}"
|
||||
test -n "$CPPFLAGS" && echo " Preprocessor flags: ${CPPFLAGS}"
|
||||
@@ -637,7 +802,7 @@ test "$x_ipv6_on" = "yes" \
|
||||
&& echo $ECHO_N "yes $ECHO_C" \
|
||||
|| echo $ECHO_N "no $ECHO_C"
|
||||
echo $ECHO_N " I/O backend: $ECHO_C"
|
||||
echo "\"$x_io_backend\""
|
||||
echo "$x_io_backend"
|
||||
|
||||
echo $ECHO_N " PAM support: $ECHO_C"
|
||||
test "$x_pam_on" = "yes" \
|
||||
@@ -646,6 +811,18 @@ test "$x_pam_on" = "yes" \
|
||||
echo $ECHO_N " SSL support: $ECHO_C"
|
||||
echo "$x_ssl_lib"
|
||||
|
||||
echo $ECHO_N " libiconv support: $ECHO_C"
|
||||
echo "$x_iconv_on"
|
||||
|
||||
echo
|
||||
|
||||
define(_automake_regex_,[[^AUTOMAKE_OPTIONS = [a-z .\-]*/portab/ansi2knr]])
|
||||
if ! grep "_automake_regex_" src/ngircd/Makefile.am >/dev/null 2>&1; then
|
||||
echo "WARNING:"
|
||||
echo "This GNU automake generated build system does not support \"de-ANSI-fication\","
|
||||
echo "therefore don't use it to generate \"official\" distribution archives!"
|
||||
echo "(Most probably you want to use GNU automake 1.11.x for this purpose ...)"
|
||||
echo
|
||||
fi
|
||||
|
||||
# -eof-
|
@@ -1,496 +0,0 @@
|
||||
From bc5023fdba8091ab7eee29fe0deeca6843159743 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Mon, 16 May 2011 18:23:01 +0200
|
||||
Subject: [PATCH 1/2] Revert "Removed ngircd as we've decided not to support it at this time"
|
||||
|
||||
This reverts commit 605b5d57171d2f0fac56ee2ee3e1b1bbdadeb24f and re-enables
|
||||
the ngIRCd protocol module for Anope.
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 475 +++++++++++++++++++++++++++++++++++++++++++
|
||||
1 files changed, 475 insertions(+), 0 deletions(-)
|
||||
create mode 100644 modules/protocol/ngircd.cpp
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
new file mode 100644
|
||||
index 0000000..6e1f21f
|
||||
--- /dev/null
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -0,0 +1,475 @@
|
||||
+/* ngIRCd IRCD functions
|
||||
+ *
|
||||
+ * (C) 2003-2011 Anope Team
|
||||
+ * Contact us at team@anope.org
|
||||
+ *
|
||||
+ * Please read COPYING and README for further details.
|
||||
+ *
|
||||
+ * Based on the original code of Epona by Lara.
|
||||
+ * Based on the original code of Services by Andy Church.
|
||||
+ */
|
||||
+
|
||||
+#include "services.h"
|
||||
+#include "modules.h"
|
||||
+
|
||||
+IRCDVar myIrcd[] = {
|
||||
+ {"ngIRCd", /* ircd name */
|
||||
+ "+oi", /* Modes used by pseudoclients */
|
||||
+ 0, /* SVSNICK */
|
||||
+ 0, /* Vhost */
|
||||
+ 0, /* Supports SNlines */
|
||||
+ 0, /* Supports SQlines */
|
||||
+ 0, /* Supports SZlines */
|
||||
+ 0, /* Join 2 Message */
|
||||
+ 0, /* Chan SQlines */
|
||||
+ 1, /* Quit on Kill */
|
||||
+ 0, /* vidents */
|
||||
+ 0, /* svshold */
|
||||
+ 0, /* time stamp on mode */
|
||||
+ 0, /* UMODE */
|
||||
+ 0, /* O:LINE */
|
||||
+ 0, /* No Knock requires +i */
|
||||
+ 0, /* Can remove User Channel Modes with SVSMODE */
|
||||
+ 0, /* Sglines are not enforced until user reconnects */
|
||||
+ 0, /* ts6 */
|
||||
+ "$", /* TLD Prefix for Global */
|
||||
+ 20, /* Max number of modes we can send per line */
|
||||
+ 0, /* IRCd sends a SSL users certificate fingerprint */
|
||||
+ }
|
||||
+ ,
|
||||
+ {NULL}
|
||||
+};
|
||||
+
|
||||
+/* PASS */
|
||||
+class ngIRCdProto : public IRCDProto
|
||||
+{
|
||||
+ void SendAkill(User *u, const XLine *x)
|
||||
+ {
|
||||
+ if (SGLine && u == NULL)
|
||||
+ for (Anope::insensitive_map<User *>::iterator it = UserListByNick.begin(); it != UserListByNick.end();)
|
||||
+ {
|
||||
+ u = it->second;
|
||||
+ ++it;
|
||||
+ if (SGLine->Check(u) != NULL)
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ void SendAkillDel(const XLine*) { }
|
||||
+
|
||||
+ void SendGlobopsInternal(const BotInfo *source, const Anope::string &buf)
|
||||
+ {
|
||||
+ send_cmd(source ? source->nick : Config->ServerName, "WALLOPS :%s", buf.c_str());
|
||||
+ }
|
||||
+
|
||||
+ void SendJoin(BotInfo *user, Channel *c, const ChannelStatus *status)
|
||||
+ {
|
||||
+ send_cmd(user->nick, "JOIN %s", c->name.c_str());
|
||||
+ if (status)
|
||||
+ for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i)
|
||||
+ if (status->HasFlag(ModeManager::ChannelModes[i]->Name))
|
||||
+ c->SetMode(user, ModeManager::ChannelModes[i], user->nick, false);
|
||||
+ }
|
||||
+
|
||||
+ void SendSVSKillInternal(const BotInfo *source, const User *user, const Anope::string &buf)
|
||||
+ {
|
||||
+ send_cmd(source ? source->nick : Config->ServerName, "KILL %s :%s", user->nick.c_str(), buf.c_str());
|
||||
+ }
|
||||
+
|
||||
+ /* SERVER name hop descript */
|
||||
+ void SendServer(const Server *server)
|
||||
+ {
|
||||
+ send_cmd("", "SERVER %s %d :%s", server->GetName().c_str(), server->GetHops(), server->GetDescription().c_str());
|
||||
+ }
|
||||
+
|
||||
+ void SendConnect()
|
||||
+ {
|
||||
+ send_cmd("", "PASS %s 0210-IRC+ Anope|%s:CLHSo P", uplink_server->password.c_str(), Anope::VersionShort().c_str());
|
||||
+ /* Make myself known to myself in the serverlist */
|
||||
+ SendServer(Me);
|
||||
+ /* finish the enhanced server handshake and register the connection */
|
||||
+ this->SendNumeric(Config->ServerName, 376, "*", ":End of MOTD command");
|
||||
+ }
|
||||
+
|
||||
+ // Received: :dev.anope.de NICK DukeP 1 ~DukePyro p57ABF9C9.dip.t-dialin.net 1 +i :DukePyrolator
|
||||
+ void SendClientIntroduction(const User *u, const Anope::string &modes)
|
||||
+ {
|
||||
+ EnforceQlinedNick(u->nick, "");
|
||||
+ send_cmd(Config->ServerName, "NICK %s 1 %s %s 1 %s :%s", u->nick.c_str(), u->GetIdent().c_str(), u->host.c_str(), modes.c_str(), u->realname.c_str());
|
||||
+ }
|
||||
+
|
||||
+ void SendPartInternal(const BotInfo *bi, const Channel *chan, const Anope::string &buf)
|
||||
+ {
|
||||
+ if (!buf.empty())
|
||||
+ send_cmd(bi->nick, "PART %s :%s", chan->name.c_str(), buf.c_str());
|
||||
+ else
|
||||
+ send_cmd(bi->nick, "PART %s", chan->name.c_str());
|
||||
+ }
|
||||
+
|
||||
+ void SendModeInternal(const BotInfo *bi, const Channel *dest, const Anope::string &buf)
|
||||
+ {
|
||||
+ send_cmd(bi ? bi->nick : Config->ServerName, "MODE %s %s", dest->name.c_str(), buf.c_str());
|
||||
+ }
|
||||
+
|
||||
+ void SendModeInternal(const BotInfo *bi, const User *u, const Anope::string &buf)
|
||||
+ {
|
||||
+ send_cmd(bi ? bi->nick : Config->ServerName, "MODE %s %s", u->nick.c_str(), buf.c_str());
|
||||
+ }
|
||||
+
|
||||
+ void SendKickInternal(const BotInfo *bi, const Channel *chan, const User *user, const Anope::string &buf)
|
||||
+ {
|
||||
+ if (!buf.empty())
|
||||
+ send_cmd(bi->nick, "KICK %s %s :%s", chan->name.c_str(), user->nick.c_str(), buf.c_str());
|
||||
+ else
|
||||
+ send_cmd(bi->nick, "KICK %s %s", chan->name.c_str(), user->nick.c_str());
|
||||
+ }
|
||||
+
|
||||
+ void SendNoticeChanopsInternal(const BotInfo *source, const Channel *dest, const Anope::string &buf)
|
||||
+ {
|
||||
+ send_cmd(source ? source->nick : Config->s_ChanServ, "NOTICE @%s :%s", dest->name.c_str(), buf.c_str());
|
||||
+ }
|
||||
+
|
||||
+ /* INVITE */
|
||||
+ void SendInvite(BotInfo *source, const Anope::string &chan, const Anope::string &nick)
|
||||
+ {
|
||||
+ send_cmd(source->nick, "INVITE %s %s", nick.c_str(), chan.c_str());
|
||||
+ }
|
||||
+
|
||||
+ void SendChannel(Channel *c)
|
||||
+ {
|
||||
+ Anope::string mlock_modes = get_mlock_modes(c->ci, true);
|
||||
+ if (mlock_modes.empty())
|
||||
+ mlock_modes = "+";
|
||||
+ send_cmd(Config->ServerName, "CHANINFO %s %s", c->name.c_str(), mlock_modes.c_str());
|
||||
+ }
|
||||
+ void SendTopic(BotInfo *bi, Channel *c)
|
||||
+ {
|
||||
+ send_cmd(bi->nick, "TOPIC %s :%s", c->name.c_str(), c->topic.c_str());
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+class ngIRCdIRCdMessage : public IRCdMessage
|
||||
+{
|
||||
+ public:
|
||||
+ bool OnSJoin(const Anope::string&, const std::vector<Anope::string>&) { return false; }
|
||||
+
|
||||
+ /*
|
||||
+ * Received: :dev.anope.de MODE #anope +b *!*@*aol*
|
||||
+ */
|
||||
+ bool OnMode(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+ {
|
||||
+ if (params.size() < 2)
|
||||
+ return true;
|
||||
+
|
||||
+ Anope::string modes = params[1];
|
||||
+ for (unsigned i = 2; i < params.size(); ++i)
|
||||
+ modes += " " + params[i];
|
||||
+
|
||||
+ if (params[0][0] == '#' || params[0][0] == '&')
|
||||
+ do_cmode(source, params[0], modes, "");
|
||||
+ else
|
||||
+ do_umode(params[0], params[1]);
|
||||
+
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ Received: :DukeP_ NICK :test2
|
||||
+ Received: :dev.anope.de NICK DukeP_ 1 ~DukePyro ip-2-201-236-154.web.vodafone.de 1 + :DukePyrolator
|
||||
+ source = nickname on nickchange, servername on newuser
|
||||
+ params[0] = nick
|
||||
+ params[1] = <unknown>
|
||||
+ params[2] = username
|
||||
+ params[3] = host
|
||||
+ params[4] = <unknown>
|
||||
+ params[5] = modes
|
||||
+ params[6] = info
|
||||
+ */
|
||||
+ bool OnNick(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+ {
|
||||
+ if (params.size() == 1)
|
||||
+ {
|
||||
+ // we have a nickchange
|
||||
+ do_nick(source, params[0], "", "", "", "", Anope::CurTime, "", "", "", "");
|
||||
+ }
|
||||
+ else if (params.size() == 7)
|
||||
+ {
|
||||
+ // a new user is connecting to the network
|
||||
+ User *user = do_nick("", params[0], params[2], params[3], source, params[6], Anope::CurTime, "", "", "", params[5]);
|
||||
+ if (user)
|
||||
+ validate_user(user);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ Log() << "Received NICK with invalid number of parameters. source = " << source << "param[0] = " << params[0] << "params.size() = " << params.size();
|
||||
+ }
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ bool OnServer(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+ {
|
||||
+ if (params.size() == 3)
|
||||
+ do_server("", params[0], 0, params[2], params[1]);
|
||||
+ else
|
||||
+ do_server(source, params[0], params[1].is_pos_number_only() ? convertTo<unsigned>(params[1]) : 0, params[3], params[2]);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ bool OnTopic(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+ {
|
||||
+ Channel *c = findchan(params[0]);
|
||||
+ if (!c)
|
||||
+ {
|
||||
+ Log() << "TOPIC for nonexistant channel " << params[0];
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ c->ChangeTopicInternal(source, params[1]);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * <@po||ux> DukeP: RFC 2813, 4.2.1: the JOIN command on server-server links
|
||||
+ * separates the modes ("o") with ASCII 7, not space. And you can't see ASCII 7.
|
||||
+ *
|
||||
+ * if a user joins a new channel, the ircd sends <channelname>\7<umode>
|
||||
+ */
|
||||
+ bool OnJoin (const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+ {
|
||||
+ if (!params.empty())
|
||||
+ {
|
||||
+ size_t pos = params[0].find('\7');
|
||||
+ if (pos != Anope::string::npos)
|
||||
+ {
|
||||
+ Anope::string channel = params[0].substr(0, pos);
|
||||
+ Anope::string mode = '+' + params[0].substr(pos, params[0].length()) + " " + source;
|
||||
+ do_join(source, channel, "");
|
||||
+ do_cmode(source, channel, mode, "");
|
||||
+ }
|
||||
+ else
|
||||
+ do_join(source, params[0], "");
|
||||
+ }
|
||||
+ return true;
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * CHANINFO <chan> +<modes>
|
||||
+ * CHANINFO <chan> +<modes> :<topic>
|
||||
+ * CHANINFO <chan> +<modes> <key> <limit> :<topic>
|
||||
+ */
|
||||
+bool event_chaninfo(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+{
|
||||
+
|
||||
+ Channel *c = findchan(params[0]);
|
||||
+ if (!c)
|
||||
+ c = new Channel(params[0]);
|
||||
+
|
||||
+ Anope::string modes = params[1];
|
||||
+
|
||||
+ if (params.size() == 3)
|
||||
+ {
|
||||
+ c->ChangeTopicInternal(source, params[2], Anope::CurTime);
|
||||
+ }
|
||||
+ else if (params.size() == 5)
|
||||
+ {
|
||||
+ for (size_t i = 0, end = params[1].length(); i < end; ++i)
|
||||
+ {
|
||||
+ switch(params[1][i])
|
||||
+ {
|
||||
+ case 'k':
|
||||
+ modes += " " + params[2];
|
||||
+ continue;
|
||||
+ case 'l':
|
||||
+ modes += " " + params[3];
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+ c->ChangeTopicInternal(source, params[4], Anope::CurTime);
|
||||
+ }
|
||||
+
|
||||
+ c->SetModesInternal(NULL, modes);
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Received: :dev.anope.de NJOIN #test :DukeP2,@DukeP
|
||||
+ */
|
||||
+bool event_njoin(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+{
|
||||
+ Channel *c = findchan(params[0]);
|
||||
+ commasepstream sep(params[1]);
|
||||
+ Anope::string buf;
|
||||
+
|
||||
+ if (!c)
|
||||
+ {
|
||||
+ c = new Channel(params[0], Anope::CurTime);
|
||||
+ c->SetFlag(CH_SYNCING);
|
||||
+ }
|
||||
+
|
||||
+ while (sep.GetToken(buf))
|
||||
+ {
|
||||
+ std::list<ChannelMode *> Status;
|
||||
+ char ch;
|
||||
+
|
||||
+ /* Get prefixes from the nick */
|
||||
+ while ((ch = ModeManager::GetStatusChar(buf[0])))
|
||||
+ {
|
||||
+ buf.erase(buf.begin());
|
||||
+ ChannelMode *cm = ModeManager::FindChannelModeByChar(ch);
|
||||
+ if (!cm)
|
||||
+ {
|
||||
+ Log() << "Received unknown mode prefix " << ch << " in NJOIN string.";
|
||||
+ continue;
|
||||
+ }
|
||||
+ Status.push_back(cm);
|
||||
+ }
|
||||
+ User *u = finduser(buf);
|
||||
+ if (!u)
|
||||
+ {
|
||||
+ Log(LOG_DEBUG) << "NJOIN for nonexistant user " << buf << " on " << c->name;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ EventReturn MOD_RESULT;
|
||||
+ FOREACH_RESULT(I_OnPreJoinChannel, OnPreJoinChannel(u, c));
|
||||
+
|
||||
+ /* Add the user to the Channel */
|
||||
+ c->JoinUser(u);
|
||||
+
|
||||
+ /* Update their status internally on the channel
|
||||
+ * This will enforce secureops etc on the user
|
||||
+ */
|
||||
+ for (std::list<ChannelMode *>::iterator it = Status.begin(), it_end = Status.end(); it != it_end; ++it)
|
||||
+ c->SetModeInternal(*it, buf);
|
||||
+ /* Now set whatever modes this user is allowed to have on the channel */
|
||||
+ chan_set_correct_modes(u, c, 1);
|
||||
+
|
||||
+ /* Check to see if modules want the user to join, if they do
|
||||
+ * check to see if they are allowed to join (CheckKick will kick/ban them)
|
||||
+ * Don't trigger OnJoinChannel event then as the user will be destroyed
|
||||
+ */
|
||||
+ if (MOD_RESULT != EVENT_STOP && c->ci && c->ci->CheckKick(u))
|
||||
+ continue;
|
||||
+
|
||||
+ FOREACH_MOD(I_OnJoinChannel, OnJoinChannel(u, c));
|
||||
+ } /* while */
|
||||
+
|
||||
+ if (c->HasFlag(CH_SYNCING))
|
||||
+ {
|
||||
+ c->UnsetFlag(CH_SYNCING);
|
||||
+ c->Sync();
|
||||
+ }
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+bool event_kick(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+{
|
||||
+ if (params.size() > 2)
|
||||
+ do_kick(source, params[0], params[1], params[2]);
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+bool event_pass(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+{
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+bool event_005(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+{
|
||||
+ size_t pos;
|
||||
+ Anope::string name, data;
|
||||
+ for (unsigned i = 0, end = params.size(); i < end; ++i)
|
||||
+ {
|
||||
+ pos = params[i].find('=');
|
||||
+ if (pos != Anope::string::npos)
|
||||
+ {
|
||||
+ name = params[i].substr(0, pos);
|
||||
+ data = params[i].substr(pos+1, params[i].length());
|
||||
+ if (name == "NICKLEN")
|
||||
+ {
|
||||
+ unsigned newlen = convertTo<unsigned>(data);
|
||||
+ if (Config->NickLen != newlen)
|
||||
+ {
|
||||
+ Log() << "Config->NickLen changed from " << Config->NickLen << " to " << newlen;
|
||||
+ Config->NickLen = newlen;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+bool event_442(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+{
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+bool event_376(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+{
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+class ProtongIRCd : public Module
|
||||
+{
|
||||
+ Message message_kick, message_pass, message_njoin, message_chaninfo, message_005,
|
||||
+ message_442, message_376;
|
||||
+
|
||||
+ ngIRCdProto ircd_proto;
|
||||
+ ngIRCdIRCdMessage ircd_message;
|
||||
+
|
||||
+ void AddModes()
|
||||
+ {
|
||||
+ /* Add user modes */
|
||||
+ ModeManager::AddUserMode(new UserMode(UMODE_ADMIN, 'a'));
|
||||
+ ModeManager::AddUserMode(new UserMode(UMODE_INVIS, 'i'));
|
||||
+ ModeManager::AddUserMode(new UserMode(UMODE_OPER, 'o'));
|
||||
+ ModeManager::AddUserMode(new UserMode(UMODE_RESTRICTED, 'r'));
|
||||
+ ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, 's'));
|
||||
+ ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w'));
|
||||
+ ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x'));
|
||||
+
|
||||
+ /* b/e/I */
|
||||
+ ModeManager::AddChannelMode(new ChannelModeBan(CMODE_BAN, 'b'));
|
||||
+ ModeManager::AddChannelMode(new ChannelModeList(CMODE_INVITEOVERRIDE, 'I'));
|
||||
+
|
||||
+ /* v/h/o/a/q */
|
||||
+ ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+'));
|
||||
+ ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@'));
|
||||
+
|
||||
+ /* Add channel modes */
|
||||
+ // channel modes: biIklmnoPstvz
|
||||
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i'));
|
||||
+ ModeManager::AddChannelMode(new ChannelModeKey('k'));
|
||||
+ ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l'));
|
||||
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm'));
|
||||
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n'));
|
||||
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, 'P'));
|
||||
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's'));
|
||||
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't'));
|
||||
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, 'z'));
|
||||
+ }
|
||||
+
|
||||
+ public:
|
||||
+ ProtongIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator),
|
||||
+ message_kick("KICK", event_kick), message_pass("PASS", event_pass),
|
||||
+ message_njoin("NJOIN", event_njoin), message_chaninfo("CHANINFO", event_chaninfo),
|
||||
+ message_005("005", event_005), message_442("442", event_442), message_376("376", event_376)
|
||||
+ {
|
||||
+ this->SetAuthor("Anope");
|
||||
+ this->SetType(PROTOCOL);
|
||||
+
|
||||
+ Capab.SetFlag(CAPAB_QS);
|
||||
+
|
||||
+ pmodule_ircd_var(myIrcd);
|
||||
+ pmodule_ircd_proto(&this->ircd_proto);
|
||||
+ pmodule_ircd_message(&this->ircd_message);
|
||||
+
|
||||
+ this->AddModes();
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+MODULE_INIT(ProtongIRCd)
|
||||
--
|
||||
1.7.2.5
|
||||
|
@@ -1,60 +0,0 @@
|
||||
From 1ea1dd2095e63cef34edbebb729edc687f410a96 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Mon, 16 May 2011 18:26:56 +0200
|
||||
Subject: [PATCH 2/2] ngircd: whitespace fixes
|
||||
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 12 ++++++------
|
||||
1 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 6e1f21f..e546d05 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -266,11 +266,11 @@ bool event_chaninfo(const Anope::string &source, const std::vector<Anope::string
|
||||
c = new Channel(params[0]);
|
||||
|
||||
Anope::string modes = params[1];
|
||||
-
|
||||
+
|
||||
if (params.size() == 3)
|
||||
{
|
||||
c->ChangeTopicInternal(source, params[2], Anope::CurTime);
|
||||
- }
|
||||
+ }
|
||||
else if (params.size() == 5)
|
||||
{
|
||||
for (size_t i = 0, end = params[1].length(); i < end; ++i)
|
||||
@@ -307,7 +307,7 @@ bool event_njoin(const Anope::string &source, const std::vector<Anope::string> &
|
||||
c = new Channel(params[0], Anope::CurTime);
|
||||
c->SetFlag(CH_SYNCING);
|
||||
}
|
||||
-
|
||||
+
|
||||
while (sep.GetToken(buf))
|
||||
{
|
||||
std::list<ChannelMode *> Status;
|
||||
@@ -415,9 +415,9 @@ bool event_376(const Anope::string &source, const std::vector<Anope::string> &pa
|
||||
|
||||
class ProtongIRCd : public Module
|
||||
{
|
||||
- Message message_kick, message_pass, message_njoin, message_chaninfo, message_005,
|
||||
+ Message message_kick, message_pass, message_njoin, message_chaninfo, message_005,
|
||||
message_442, message_376;
|
||||
-
|
||||
+
|
||||
ngIRCdProto ircd_proto;
|
||||
ngIRCdIRCdMessage ircd_message;
|
||||
|
||||
@@ -461,7 +461,7 @@ class ProtongIRCd : public Module
|
||||
{
|
||||
this->SetAuthor("Anope");
|
||||
this->SetType(PROTOCOL);
|
||||
-
|
||||
+
|
||||
Capab.SetFlag(CAPAB_QS);
|
||||
|
||||
pmodule_ircd_var(myIrcd);
|
||||
--
|
||||
1.7.2.5
|
||||
|
@@ -1,128 +0,0 @@
|
||||
From d8eddbeaadc7d161865b5342d59748b80266533c Mon Sep 17 00:00:00 2001
|
||||
From: DukePyrolator <DukePyrolator@anope.org>
|
||||
Date: Mon, 22 Aug 2011 14:53:37 +0200
|
||||
Subject: [PATCH 03/16] Update ngIRCd protocol module for current Anope 1.9
|
||||
GIT
|
||||
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 37 ++++++++++++++++++-------------------
|
||||
1 files changed, 18 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index e546d05..790b8f4 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -11,6 +11,8 @@
|
||||
|
||||
#include "services.h"
|
||||
#include "modules.h"
|
||||
+#include "nickserv.h"
|
||||
+#include "oper.h"
|
||||
|
||||
IRCDVar myIrcd[] = {
|
||||
{"ngIRCd", /* ircd name */
|
||||
@@ -45,14 +47,7 @@ class ngIRCdProto : public IRCDProto
|
||||
{
|
||||
void SendAkill(User *u, const XLine *x)
|
||||
{
|
||||
- if (SGLine && u == NULL)
|
||||
- for (Anope::insensitive_map<User *>::iterator it = UserListByNick.begin(); it != UserListByNick.end();)
|
||||
- {
|
||||
- u = it->second;
|
||||
- ++it;
|
||||
- if (SGLine->Check(u) != NULL)
|
||||
- break;
|
||||
- }
|
||||
+ // TODO: ADD SOME CODE
|
||||
}
|
||||
|
||||
void SendAkillDel(const XLine*) { }
|
||||
@@ -62,13 +57,16 @@ class ngIRCdProto : public IRCDProto
|
||||
send_cmd(source ? source->nick : Config->ServerName, "WALLOPS :%s", buf.c_str());
|
||||
}
|
||||
|
||||
- void SendJoin(BotInfo *user, Channel *c, const ChannelStatus *status)
|
||||
+ void SendJoin(User *user, Channel *c, const ChannelStatus *status)
|
||||
{
|
||||
send_cmd(user->nick, "JOIN %s", c->name.c_str());
|
||||
if (status)
|
||||
+ {
|
||||
+ BotInfo *setter = findbot(user->nick);
|
||||
for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i)
|
||||
if (status->HasFlag(ModeManager::ChannelModes[i]->Name))
|
||||
- c->SetMode(user, ModeManager::ChannelModes[i], user->nick, false);
|
||||
+ c->SetMode(setter, ModeManager::ChannelModes[i], user->nick, false);
|
||||
+ }
|
||||
}
|
||||
|
||||
void SendSVSKillInternal(const BotInfo *source, const User *user, const Anope::string &buf)
|
||||
@@ -84,7 +82,7 @@ class ngIRCdProto : public IRCDProto
|
||||
|
||||
void SendConnect()
|
||||
{
|
||||
- send_cmd("", "PASS %s 0210-IRC+ Anope|%s:CLHSo P", uplink_server->password.c_str(), Anope::VersionShort().c_str());
|
||||
+ send_cmd("", "PASS %s 0210-IRC+ Anope|%s:CLHSo P", Config->Uplinks[CurrentUplink]->password.c_str(), Anope::VersionShort().c_str());
|
||||
/* Make myself known to myself in the serverlist */
|
||||
SendServer(Me);
|
||||
/* finish the enhanced server handshake and register the connection */
|
||||
@@ -92,9 +90,11 @@ class ngIRCdProto : public IRCDProto
|
||||
}
|
||||
|
||||
// Received: :dev.anope.de NICK DukeP 1 ~DukePyro p57ABF9C9.dip.t-dialin.net 1 +i :DukePyrolator
|
||||
- void SendClientIntroduction(const User *u, const Anope::string &modes)
|
||||
+ void SendClientIntroduction(const User *u)
|
||||
{
|
||||
- EnforceQlinedNick(u->nick, "");
|
||||
+ Anope::string modes = "+" + u->GetModes();
|
||||
+ XLine x(u->nick, "Reserved for services");
|
||||
+ ircdproto->SendSQLine(NULL, &x);
|
||||
send_cmd(Config->ServerName, "NICK %s 1 %s %s 1 %s :%s", u->nick.c_str(), u->GetIdent().c_str(), u->host.c_str(), modes.c_str(), u->realname.c_str());
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ class ngIRCdProto : public IRCDProto
|
||||
|
||||
void SendNoticeChanopsInternal(const BotInfo *source, const Channel *dest, const Anope::string &buf)
|
||||
{
|
||||
- send_cmd(source ? source->nick : Config->s_ChanServ, "NOTICE @%s :%s", dest->name.c_str(), buf.c_str());
|
||||
+ send_cmd(source->nick, "NOTICE @%s :%s", dest->name.c_str(), buf.c_str());
|
||||
}
|
||||
|
||||
/* INVITE */
|
||||
@@ -196,8 +196,8 @@ class ngIRCdIRCdMessage : public IRCdMessage
|
||||
{
|
||||
// a new user is connecting to the network
|
||||
User *user = do_nick("", params[0], params[2], params[3], source, params[6], Anope::CurTime, "", "", "", params[5]);
|
||||
- if (user)
|
||||
- validate_user(user);
|
||||
+ if (user && nickserv)
|
||||
+ nickserv->Validate(user);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -433,7 +433,7 @@ class ProtongIRCd : public Module
|
||||
ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x'));
|
||||
|
||||
/* b/e/I */
|
||||
- ModeManager::AddChannelMode(new ChannelModeBan(CMODE_BAN, 'b'));
|
||||
+ ModeManager::AddChannelMode(new ChannelModeList(CMODE_BAN, 'b'));
|
||||
ModeManager::AddChannelMode(new ChannelModeList(CMODE_INVITEOVERRIDE, 'I'));
|
||||
|
||||
/* v/h/o/a/q */
|
||||
@@ -454,13 +454,12 @@ class ProtongIRCd : public Module
|
||||
}
|
||||
|
||||
public:
|
||||
- ProtongIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator),
|
||||
+ ProtongIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, PROTOCOL),
|
||||
message_kick("KICK", event_kick), message_pass("PASS", event_pass),
|
||||
message_njoin("NJOIN", event_njoin), message_chaninfo("CHANINFO", event_chaninfo),
|
||||
message_005("005", event_005), message_442("442", event_442), message_376("376", event_376)
|
||||
{
|
||||
this->SetAuthor("Anope");
|
||||
- this->SetType(PROTOCOL);
|
||||
|
||||
Capab.SetFlag(CAPAB_QS);
|
||||
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,93 +0,0 @@
|
||||
From 88b2b14a76b8ee053b1f6ea64139350260590043 Mon Sep 17 00:00:00 2001
|
||||
From: DukePyrolator <DukePyrolator@anope.org>
|
||||
Date: Mon, 22 Aug 2011 14:55:07 +0200
|
||||
Subject: [PATCH 04/16] ngircd: Do PING-PONG on server burst to "sync servers"
|
||||
|
||||
Imagine we had three servers, A, B & C linked like so: A<->B<->C:
|
||||
|
||||
If Anope is linked to A and B splits from A and then reconnects B
|
||||
introduces itself, introduces C, sends EOS for C, introduces B's clients
|
||||
introduces C's clients, sends EOS for B. This causes all of C's clients
|
||||
to be introduced with their server "not syncing".
|
||||
|
||||
We now send a PING immediately when receiving a new server and then
|
||||
finish sync once we get a pong back from that server.
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 28 ++++++++++++++++++++++++++--
|
||||
1 files changed, 26 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 790b8f4..89aecfd 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -108,11 +108,13 @@ class ngIRCdProto : public IRCDProto
|
||||
|
||||
void SendModeInternal(const BotInfo *bi, const Channel *dest, const Anope::string &buf)
|
||||
{
|
||||
+Log(LOG_DEBUG) << "SendModeInternal 1";
|
||||
send_cmd(bi ? bi->nick : Config->ServerName, "MODE %s %s", dest->name.c_str(), buf.c_str());
|
||||
}
|
||||
|
||||
void SendModeInternal(const BotInfo *bi, const User *u, const Anope::string &buf)
|
||||
{
|
||||
+Log(LOG_DEBUG) << "SendModeInternal 2";
|
||||
send_cmd(bi ? bi->nick : Config->ServerName, "MODE %s %s", u->nick.c_str(), buf.c_str());
|
||||
}
|
||||
|
||||
@@ -212,6 +214,8 @@ class ngIRCdIRCdMessage : public IRCdMessage
|
||||
do_server("", params[0], 0, params[2], params[1]);
|
||||
else
|
||||
do_server(source, params[0], params[1].is_pos_number_only() ? convertTo<unsigned>(params[1]) : 0, params[3], params[2]);
|
||||
+
|
||||
+ ircdproto->SendPing(Config->ServerName, params[0]);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -253,6 +257,25 @@ class ngIRCdIRCdMessage : public IRCdMessage
|
||||
}
|
||||
};
|
||||
|
||||
+/** This is here because:
|
||||
+ *
|
||||
+ * If we had three servers, A, B & C linked like so: A<->B<->C
|
||||
+ * If Anope is linked to A and B splits from A and then reconnects
|
||||
+ * B introduces itself, introduces C, sends EOS for C, introduces Bs clients
|
||||
+ * introduces Cs clients, sends EOS for B. This causes all of Cs clients to be introduced
|
||||
+ * with their server "not syncing". We now send a PING immediately when receiving a new server
|
||||
+ * and then finish sync once we get a pong back from that server.
|
||||
+ */
|
||||
+bool event_pong(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
+{
|
||||
+ Server *s = Server::Find(source);
|
||||
+ if (s && !s->IsSynced())
|
||||
+ s->Sync(false);
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+
|
||||
/*
|
||||
* CHANINFO <chan> +<modes>
|
||||
* CHANINFO <chan> +<modes> :<topic>
|
||||
@@ -416,7 +439,7 @@ bool event_376(const Anope::string &source, const std::vector<Anope::string> &pa
|
||||
class ProtongIRCd : public Module
|
||||
{
|
||||
Message message_kick, message_pass, message_njoin, message_chaninfo, message_005,
|
||||
- message_442, message_376;
|
||||
+ message_442, message_376, message_pong;
|
||||
|
||||
ngIRCdProto ircd_proto;
|
||||
ngIRCdIRCdMessage ircd_message;
|
||||
@@ -457,7 +480,8 @@ class ProtongIRCd : public Module
|
||||
ProtongIRCd(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, PROTOCOL),
|
||||
message_kick("KICK", event_kick), message_pass("PASS", event_pass),
|
||||
message_njoin("NJOIN", event_njoin), message_chaninfo("CHANINFO", event_chaninfo),
|
||||
- message_005("005", event_005), message_442("442", event_442), message_376("376", event_376)
|
||||
+ message_005("005", event_005), message_442("442", event_442), message_376("376", event_376),
|
||||
+ message_pong("PONG", event_pong)
|
||||
{
|
||||
this->SetAuthor("Anope");
|
||||
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,29 +0,0 @@
|
||||
From 0d83f8f9ca0de651d664eca6f467f36df0417f7d Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Mon, 22 Aug 2011 14:59:49 +0200
|
||||
Subject: [PATCH 05/16] ngircd: always prefix modes in CHANINFO with "+"
|
||||
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 6 ++----
|
||||
1 files changed, 2 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 89aecfd..3e5beb3 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -139,10 +139,8 @@ Log(LOG_DEBUG) << "SendModeInternal 2";
|
||||
|
||||
void SendChannel(Channel *c)
|
||||
{
|
||||
- Anope::string mlock_modes = get_mlock_modes(c->ci, true);
|
||||
- if (mlock_modes.empty())
|
||||
- mlock_modes = "+";
|
||||
- send_cmd(Config->ServerName, "CHANINFO %s %s", c->name.c_str(), mlock_modes.c_str());
|
||||
+ Anope::string modes = c->GetModes(true, true);
|
||||
+ send_cmd(Config->ServerName, "CHANINFO %s +%s", c->name.c_str(), modes.c_str());
|
||||
}
|
||||
void SendTopic(BotInfo *bi, Channel *c)
|
||||
{
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,47 +0,0 @@
|
||||
From 1914a36b83b1fc6b4678ef261a1a06eefab9a0ca Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Fri, 26 Aug 2011 17:51:37 +0200
|
||||
Subject: [PATCH 06/16] ngircd: support user mode "R" and channel mode "R"
|
||||
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 7 ++++---
|
||||
1 files changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 3e5beb3..7f4186e 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -449,26 +449,27 @@ class ProtongIRCd : public Module
|
||||
ModeManager::AddUserMode(new UserMode(UMODE_INVIS, 'i'));
|
||||
ModeManager::AddUserMode(new UserMode(UMODE_OPER, 'o'));
|
||||
ModeManager::AddUserMode(new UserMode(UMODE_RESTRICTED, 'r'));
|
||||
+ ModeManager::AddUserMode(new UserMode(UMODE_REGISTERED, 'R'));
|
||||
ModeManager::AddUserMode(new UserMode(UMODE_SNOMASK, 's'));
|
||||
ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w'));
|
||||
ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x'));
|
||||
|
||||
- /* b/e/I */
|
||||
+ /* Add modes for ban and invite lists */
|
||||
ModeManager::AddChannelMode(new ChannelModeList(CMODE_BAN, 'b'));
|
||||
ModeManager::AddChannelMode(new ChannelModeList(CMODE_INVITEOVERRIDE, 'I'));
|
||||
|
||||
- /* v/h/o/a/q */
|
||||
+ /* Add channel user modes */
|
||||
ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_VOICE, 'v', '+'));
|
||||
ModeManager::AddChannelMode(new ChannelModeStatus(CMODE_OP, 'o', '@'));
|
||||
|
||||
/* Add channel modes */
|
||||
- // channel modes: biIklmnoPstvz
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_INVITE, 'i'));
|
||||
ModeManager::AddChannelMode(new ChannelModeKey('k'));
|
||||
ModeManager::AddChannelMode(new ChannelModeParam(CMODE_LIMIT, 'l'));
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm'));
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n'));
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, 'P'));
|
||||
+ ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, 'R'));
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's'));
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't'));
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_SSL, 'z'));
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,96 +0,0 @@
|
||||
From 4c9300ede35310ee5642f34e5ac227bd96fc7384 Mon Sep 17 00:00:00 2001
|
||||
From: DukePyrolator <DukePyrolator@anope.org>
|
||||
Date: Sun, 4 Sep 2011 15:08:55 +0200
|
||||
Subject: [PATCH 07/16] ngircd: Fix handling of JOIN commands
|
||||
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 60 +++++++++++++++++++++++++++++++++++++++---
|
||||
1 files changed, 55 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 7f4186e..3024fdd 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -240,16 +240,58 @@ class ngIRCdIRCdMessage : public IRCdMessage
|
||||
{
|
||||
if (!params.empty())
|
||||
{
|
||||
+ Anope::string channel, mode;
|
||||
size_t pos = params[0].find('\7');
|
||||
if (pos != Anope::string::npos)
|
||||
{
|
||||
- Anope::string channel = params[0].substr(0, pos);
|
||||
- Anope::string mode = '+' + params[0].substr(pos, params[0].length()) + " " + source;
|
||||
- do_join(source, channel, "");
|
||||
- do_cmode(source, channel, mode, "");
|
||||
+ channel = params[0].substr(0, pos);
|
||||
+ mode = '+' + params[0].substr(pos+1, params[0].length()) + " " + source;
|
||||
}
|
||||
else
|
||||
- do_join(source, params[0], "");
|
||||
+ channel = params[0];
|
||||
+
|
||||
+ Channel *c = findchan(channel);
|
||||
+
|
||||
+ if (!c)
|
||||
+ {
|
||||
+ c = new Channel(channel, Anope::CurTime);
|
||||
+ c->SetFlag(CH_SYNCING);
|
||||
+ }
|
||||
+
|
||||
+ User *u = finduser(source);
|
||||
+
|
||||
+ if (!u)
|
||||
+ {
|
||||
+ Log(LOG_DEBUG) << "JOIN for nonexistant user " << source << " on " << channel;
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ EventReturn MOD_RESULT;
|
||||
+ FOREACH_RESULT(I_OnPreJoinChannel, OnPreJoinChannel(u, c));
|
||||
+
|
||||
+ /* Add the user to the channel */
|
||||
+ c->JoinUser(u);
|
||||
+
|
||||
+ /* set the usermodes to the channel */
|
||||
+ do_cmode(source, channel, mode, "");
|
||||
+
|
||||
+ /* Now set whatever modes this user is allowed to have on the channel */
|
||||
+ chan_set_correct_modes(u, c, 1);
|
||||
+
|
||||
+ /* Check to see if modules want the user to join, if they do
|
||||
+ * check to see if they are allowed to join (CheckKick will kick/ban them)
|
||||
+ * Don't trigger OnJoinChannel event then as the user will be destroyed
|
||||
+ */
|
||||
+ if (MOD_RESULT != EVENT_STOP && c->ci && c->ci->CheckKick(u))
|
||||
+ return false;
|
||||
+
|
||||
+ FOREACH_MOD(I_OnJoinChannel, OnJoinChannel(u, c));
|
||||
+
|
||||
+ if (c->HasFlag(CH_SYNCING))
|
||||
+ {
|
||||
+ c->UnsetFlag(CH_SYNCING);
|
||||
+ c->Sync();
|
||||
+ }
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -491,7 +533,15 @@ class ProtongIRCd : public Module
|
||||
pmodule_ircd_message(&this->ircd_message);
|
||||
|
||||
this->AddModes();
|
||||
+
|
||||
+ ModuleManager::Attach(I_OnUserNickChange, this);
|
||||
}
|
||||
+
|
||||
+ void OnUserNickChange(User *u, const Anope::string &)
|
||||
+ {
|
||||
+ u->RemoveModeInternal(ModeManager::FindUserModeByName(UMODE_REGISTERED));
|
||||
+ }
|
||||
+
|
||||
};
|
||||
|
||||
MODULE_INIT(ProtongIRCd)
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,38 +0,0 @@
|
||||
From d363ebd841ea7e1db3c62730023759d69520e0d8 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Tue, 27 Sep 2011 15:08:09 +0200
|
||||
Subject: [PATCH 08/16] ngircd: Allow setting modes by clients on burst
|
||||
|
||||
This change is required by commit 43201ead9575a for the ngIRCd protocol
|
||||
module as well.
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 7 +++++--
|
||||
1 files changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 3024fdd..2774168 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -57,14 +57,17 @@ class ngIRCdProto : public IRCDProto
|
||||
send_cmd(source ? source->nick : Config->ServerName, "WALLOPS :%s", buf.c_str());
|
||||
}
|
||||
|
||||
- void SendJoin(User *user, Channel *c, const ChannelStatus *status)
|
||||
+ void SendJoin(User *user, Channel *c, ChannelStatus *status)
|
||||
{
|
||||
send_cmd(user->nick, "JOIN %s", c->name.c_str());
|
||||
if (status)
|
||||
{
|
||||
+ ChannelStatus cs = *status;
|
||||
+ status->ClearFlags();
|
||||
+
|
||||
BotInfo *setter = findbot(user->nick);
|
||||
for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i)
|
||||
- if (status->HasFlag(ModeManager::ChannelModes[i]->Name))
|
||||
+ if (cs.HasFlag(ModeManager::ChannelModes[i]->Name))
|
||||
c->SetMode(setter, ModeManager::ChannelModes[i], user->nick, false);
|
||||
}
|
||||
}
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,143 +0,0 @@
|
||||
From e74a5303f2357f4a9915bb91038a2e326323db3c Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Fri, 25 Nov 2011 19:16:37 +0100
|
||||
Subject: [PATCH 09/16] ngircd: Update protocol module for current Anope 1.9
|
||||
GIT
|
||||
|
||||
This changes are rquired by:
|
||||
|
||||
- b14f5ea88: Fixed accidentally clearing botmodes when joins are sent
|
||||
- cef3eb78d: Remove send_cmd and replace it with a stringstream
|
||||
- ddc3c2f38: Added options:nonicknameownership config option
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 54 ++++++++++++++++++++++--------------------
|
||||
1 files changed, 28 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 2774168..55cb8d7 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -54,16 +54,22 @@ class ngIRCdProto : public IRCDProto
|
||||
|
||||
void SendGlobopsInternal(const BotInfo *source, const Anope::string &buf)
|
||||
{
|
||||
- send_cmd(source ? source->nick : Config->ServerName, "WALLOPS :%s", buf.c_str());
|
||||
+ UplinkSocket::Message(source ? source->nick : Config->ServerName) << "WALLOPS :" << buf;
|
||||
}
|
||||
|
||||
- void SendJoin(User *user, Channel *c, ChannelStatus *status)
|
||||
+ void SendJoin(User *user, Channel *c, const ChannelStatus *status)
|
||||
{
|
||||
- send_cmd(user->nick, "JOIN %s", c->name.c_str());
|
||||
+ UplinkSocket::Message(user->nick) << "JOIN " << c->name;
|
||||
if (status)
|
||||
{
|
||||
+ /* First save the channel status incase uc->Status == status */
|
||||
ChannelStatus cs = *status;
|
||||
- status->ClearFlags();
|
||||
+ /* If the user is internally on the channel with flags, kill them so that
|
||||
+ * the stacker will allow this.
|
||||
+ */
|
||||
+ UserContainer *uc = c->FindUser(user);
|
||||
+ if (uc != NULL)
|
||||
+ uc->Status->ClearFlags();
|
||||
|
||||
BotInfo *setter = findbot(user->nick);
|
||||
for (unsigned i = 0; i < ModeManager::ChannelModes.size(); ++i)
|
||||
@@ -74,18 +80,18 @@ class ngIRCdProto : public IRCDProto
|
||||
|
||||
void SendSVSKillInternal(const BotInfo *source, const User *user, const Anope::string &buf)
|
||||
{
|
||||
- send_cmd(source ? source->nick : Config->ServerName, "KILL %s :%s", user->nick.c_str(), buf.c_str());
|
||||
+ UplinkSocket::Message(source ? source->nick : Config->ServerName) << "KILL " << user->nick << " :" << buf;
|
||||
}
|
||||
|
||||
/* SERVER name hop descript */
|
||||
void SendServer(const Server *server)
|
||||
{
|
||||
- send_cmd("", "SERVER %s %d :%s", server->GetName().c_str(), server->GetHops(), server->GetDescription().c_str());
|
||||
+ UplinkSocket::Message() << "SERVER " << server->GetName() << " " << server->GetHops() << " :" << server->GetDescription();
|
||||
}
|
||||
|
||||
void SendConnect()
|
||||
{
|
||||
- send_cmd("", "PASS %s 0210-IRC+ Anope|%s:CLHSo P", Config->Uplinks[CurrentUplink]->password.c_str(), Anope::VersionShort().c_str());
|
||||
+ UplinkSocket::Message() << "PASS " << Config->Uplinks[CurrentUplink]->password << " 0210-IRC+ Anope|" << Anope::VersionShort() << ":CLHSo P";
|
||||
/* Make myself known to myself in the serverlist */
|
||||
SendServer(Me);
|
||||
/* finish the enhanced server handshake and register the connection */
|
||||
@@ -98,56 +104,52 @@ class ngIRCdProto : public IRCDProto
|
||||
Anope::string modes = "+" + u->GetModes();
|
||||
XLine x(u->nick, "Reserved for services");
|
||||
ircdproto->SendSQLine(NULL, &x);
|
||||
- send_cmd(Config->ServerName, "NICK %s 1 %s %s 1 %s :%s", u->nick.c_str(), u->GetIdent().c_str(), u->host.c_str(), modes.c_str(), u->realname.c_str());
|
||||
+ UplinkSocket::Message(Config->ServerName) << "NICK " << u->nick << " 1 " << u->GetIdent() << " " << u->host << " 1 " << modes << " :" << u->realname;
|
||||
}
|
||||
|
||||
void SendPartInternal(const BotInfo *bi, const Channel *chan, const Anope::string &buf)
|
||||
{
|
||||
if (!buf.empty())
|
||||
- send_cmd(bi->nick, "PART %s :%s", chan->name.c_str(), buf.c_str());
|
||||
+ UplinkSocket::Message(bi->nick) << "PART " << chan->name << " :" << buf;
|
||||
else
|
||||
- send_cmd(bi->nick, "PART %s", chan->name.c_str());
|
||||
+ UplinkSocket::Message(bi->nick) << "PART " << chan->name;
|
||||
}
|
||||
|
||||
void SendModeInternal(const BotInfo *bi, const Channel *dest, const Anope::string &buf)
|
||||
{
|
||||
-Log(LOG_DEBUG) << "SendModeInternal 1";
|
||||
- send_cmd(bi ? bi->nick : Config->ServerName, "MODE %s %s", dest->name.c_str(), buf.c_str());
|
||||
+ UplinkSocket::Message(bi ? bi->nick : Config->ServerName) << "MODE " << dest->name << " " << buf;
|
||||
}
|
||||
|
||||
void SendModeInternal(const BotInfo *bi, const User *u, const Anope::string &buf)
|
||||
{
|
||||
-Log(LOG_DEBUG) << "SendModeInternal 2";
|
||||
- send_cmd(bi ? bi->nick : Config->ServerName, "MODE %s %s", u->nick.c_str(), buf.c_str());
|
||||
+ UplinkSocket::Message(bi ? bi->nick : Config->ServerName) << "MODE " << u->nick << " " << buf;
|
||||
}
|
||||
|
||||
void SendKickInternal(const BotInfo *bi, const Channel *chan, const User *user, const Anope::string &buf)
|
||||
{
|
||||
if (!buf.empty())
|
||||
- send_cmd(bi->nick, "KICK %s %s :%s", chan->name.c_str(), user->nick.c_str(), buf.c_str());
|
||||
+ UplinkSocket::Message(bi->nick) << "KICK " << chan->name << " " << user->nick << " :" << buf;
|
||||
else
|
||||
- send_cmd(bi->nick, "KICK %s %s", chan->name.c_str(), user->nick.c_str());
|
||||
+ UplinkSocket::Message(bi->nick) << "KICK " << chan->name << " " << user->nick;
|
||||
}
|
||||
|
||||
- void SendNoticeChanopsInternal(const BotInfo *source, const Channel *dest, const Anope::string &buf)
|
||||
+ void SendChannel(Channel *c)
|
||||
{
|
||||
- send_cmd(source->nick, "NOTICE @%s :%s", dest->name.c_str(), buf.c_str());
|
||||
+ Anope::string modes = c->GetModes(true, true);
|
||||
+ UplinkSocket::Message(Config->ServerName) << "CHANINFO " << c->name << " +" << modes;
|
||||
}
|
||||
|
||||
- /* INVITE */
|
||||
- void SendInvite(BotInfo *source, const Anope::string &chan, const Anope::string &nick)
|
||||
+ void SendTopic(BotInfo *bi, Channel *c)
|
||||
{
|
||||
- send_cmd(source->nick, "INVITE %s %s", nick.c_str(), chan.c_str());
|
||||
+ UplinkSocket::Message(bi->nick) << "TOPIC " << c->name << " :" << c->topic;
|
||||
}
|
||||
|
||||
- void SendChannel(Channel *c)
|
||||
+ void SendLogin(User *u)
|
||||
{
|
||||
- Anope::string modes = c->GetModes(true, true);
|
||||
- send_cmd(Config->ServerName, "CHANINFO %s +%s", c->name.c_str(), modes.c_str());
|
||||
}
|
||||
- void SendTopic(BotInfo *bi, Channel *c)
|
||||
+
|
||||
+ void SendLogout(User *u)
|
||||
{
|
||||
- send_cmd(bi->nick, "TOPIC %s :%s", c->name.c_str(), c->topic.c_str());
|
||||
}
|
||||
};
|
||||
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,57 +0,0 @@
|
||||
From d2c45d7c578ec684d3b471020f631847316de196 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Fri, 25 Nov 2011 19:17:19 +0100
|
||||
Subject: [PATCH 10/16] ngircd: Add ~ProtongIRCd()
|
||||
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 13 ++++++++-----
|
||||
1 files changed, 8 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 55cb8d7..5fd62db 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -302,8 +302,7 @@ class ngIRCdIRCdMessage : public IRCdMessage
|
||||
}
|
||||
};
|
||||
|
||||
-/** This is here because:
|
||||
- *
|
||||
+/*
|
||||
* If we had three servers, A, B & C linked like so: A<->B<->C
|
||||
* If Anope is linked to A and B splits from A and then reconnects
|
||||
* B introduces itself, introduces C, sends EOS for C, introduces Bs clients
|
||||
@@ -319,8 +318,6 @@ bool event_pong(const Anope::string &source, const std::vector<Anope::string> &p
|
||||
return true;
|
||||
}
|
||||
|
||||
-
|
||||
-
|
||||
/*
|
||||
* CHANINFO <chan> +<modes>
|
||||
* CHANINFO <chan> +<modes> :<topic>
|
||||
@@ -480,7 +477,6 @@ bool event_376(const Anope::string &source, const std::vector<Anope::string> &pa
|
||||
return true;
|
||||
}
|
||||
|
||||
-
|
||||
class ProtongIRCd : public Module
|
||||
{
|
||||
Message message_kick, message_pass, message_njoin, message_chaninfo, message_005,
|
||||
@@ -542,6 +538,13 @@ class ProtongIRCd : public Module
|
||||
ModuleManager::Attach(I_OnUserNickChange, this);
|
||||
}
|
||||
|
||||
+ ~ProtongIRCd()
|
||||
+ {
|
||||
+ pmodule_ircd_var(NULL);
|
||||
+ pmodule_ircd_proto(NULL);
|
||||
+ pmodule_ircd_message(NULL);
|
||||
+ }
|
||||
+
|
||||
void OnUserNickChange(User *u, const Anope::string &)
|
||||
{
|
||||
u->RemoveModeInternal(ModeManager::FindUserModeByName(UMODE_REGISTERED));
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,29 +0,0 @@
|
||||
From 4dc5a3d3e2fbb218461d9459bff1c0a392a75881 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Sat, 31 Dec 2011 16:12:52 +0100
|
||||
Subject: [PATCH 11/16] ngircd: Update protocol module for current Anope 1.9
|
||||
GIT
|
||||
|
||||
This changes are rquired by:
|
||||
|
||||
- 150831c1a: Made capab management a bit simplier
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 5fd62db..9c26ec8 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -527,7 +527,7 @@ class ProtongIRCd : public Module
|
||||
{
|
||||
this->SetAuthor("Anope");
|
||||
|
||||
- Capab.SetFlag(CAPAB_QS);
|
||||
+ Capab.insert("QS");
|
||||
|
||||
pmodule_ircd_var(myIrcd);
|
||||
pmodule_ircd_proto(&this->ircd_proto);
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,25 +0,0 @@
|
||||
From 99c18cafdee28bfb17fad5f0526b3ed5d1f5f312 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Sat, 31 Dec 2011 16:17:50 +0100
|
||||
Subject: [PATCH 12/16] ngircd: let Anope know that channel mode "r" is
|
||||
supported
|
||||
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 9c26ec8..6155667 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -512,6 +512,7 @@ class ProtongIRCd : public Module
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_MODERATED, 'm'));
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_NOEXTERNAL, 'n'));
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_PERM, 'P'));
|
||||
+ ModeManager::AddChannelMode(new ChannelModeRegistered('r'));
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_REGISTEREDONLY, 'R'));
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_SECRET, 's'));
|
||||
ModeManager::AddChannelMode(new ChannelMode(CMODE_TOPIC, 't'));
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,28 +0,0 @@
|
||||
From 5a19b69f0daceb5b12ec751bc919519a7f712f2d Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Sun, 15 Jan 2012 13:36:14 +0100
|
||||
Subject: [PATCH 13/16] ngircd: Update copyright notice
|
||||
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 7 ++++---
|
||||
1 files changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 6155667..024c61d 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -1,7 +1,8 @@
|
||||
-/* ngIRCd IRCD functions
|
||||
+/*
|
||||
+ * ngIRCd Protocol module for Anope IRC Services
|
||||
*
|
||||
- * (C) 2003-2011 Anope Team
|
||||
- * Contact us at team@anope.org
|
||||
+ * (C) 2011-2012 Alexander Barton <alex@barton.de>
|
||||
+ * (C) 2011 Anope Team <team@anope.org>
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
*
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,35 +0,0 @@
|
||||
From acc24a7f4488f6ef0fb240a76766db4220b62d53 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Sun, 22 Jan 2012 19:05:28 +0100
|
||||
Subject: [PATCH 14/16] ngircd: set/unset GLINE's on AKILL commands
|
||||
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 10 ++++++++--
|
||||
1 files changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 024c61d..3bc3812 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -48,10 +48,16 @@ class ngIRCdProto : public IRCDProto
|
||||
{
|
||||
void SendAkill(User *u, const XLine *x)
|
||||
{
|
||||
- // TODO: ADD SOME CODE
|
||||
+ // Calculate the time left before this would expire, capping it at 2 days
|
||||
+ time_t timeleft = x->Expires - Anope::CurTime;
|
||||
+ if (timeleft > 172800 || !x->Expires)
|
||||
+ timeleft = 172800;
|
||||
+ UplinkSocket::Message(Config->ServerName) << "GLINE " << x->Mask << " " << timeleft << " :" << x->Reason << " (" << x->By << ")";
|
||||
}
|
||||
|
||||
- void SendAkillDel(const XLine*) { }
|
||||
+ void SendAkillDel(const XLine *x) {
|
||||
+ UplinkSocket::Message(Config->ServerName) << "GLINE " << x->Mask;
|
||||
+ }
|
||||
|
||||
void SendGlobopsInternal(const BotInfo *source, const Anope::string &buf)
|
||||
{
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,27 +0,0 @@
|
||||
From 3a61b190db79848d4519296432ebb2ab714c42b7 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Sun, 22 Jan 2012 19:06:34 +0100
|
||||
Subject: [PATCH 15/16] ngircd: ngIRCd supports channel mode 'e' now
|
||||
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 3 ++-
|
||||
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 3bc3812..0f87cbd 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -504,8 +504,9 @@ class ProtongIRCd : public Module
|
||||
ModeManager::AddUserMode(new UserMode(UMODE_WALLOPS, 'w'));
|
||||
ModeManager::AddUserMode(new UserMode(UMODE_CLOAK, 'x'));
|
||||
|
||||
- /* Add modes for ban and invite lists */
|
||||
+ /* Add modes for ban, exception, and invite lists */
|
||||
ModeManager::AddChannelMode(new ChannelModeList(CMODE_BAN, 'b'));
|
||||
+ ModeManager::AddChannelMode(new ChannelModeList(CMODE_EXCEPT, 'e'));
|
||||
ModeManager::AddChannelMode(new ChannelModeList(CMODE_INVITEOVERRIDE, 'I'));
|
||||
|
||||
/* Add channel user modes */
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,35 +0,0 @@
|
||||
From a7c48fcf47af757cf1b4eeaa6bcc96f4ae1f7410 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Barton <alex@barton.de>
|
||||
Date: Sat, 4 Feb 2012 11:13:36 +0100
|
||||
Subject: [PATCH 16/16] ngircd: support SQUERY command
|
||||
|
||||
Thanks to DukePyrolator for explaining these changes to me.
|
||||
---
|
||||
modules/protocol/ngircd.cpp | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp
|
||||
index 0f87cbd..530686e 100644
|
||||
--- a/modules/protocol/ngircd.cpp
|
||||
+++ b/modules/protocol/ngircd.cpp
|
||||
@@ -487,7 +487,7 @@ bool event_376(const Anope::string &source, const std::vector<Anope::string> &pa
|
||||
class ProtongIRCd : public Module
|
||||
{
|
||||
Message message_kick, message_pass, message_njoin, message_chaninfo, message_005,
|
||||
- message_442, message_376, message_pong;
|
||||
+ message_442, message_376, message_pong, message_squery;
|
||||
|
||||
ngIRCdProto ircd_proto;
|
||||
ngIRCdIRCdMessage ircd_message;
|
||||
@@ -532,7 +532,7 @@ class ProtongIRCd : public Module
|
||||
message_kick("KICK", event_kick), message_pass("PASS", event_pass),
|
||||
message_njoin("NJOIN", event_njoin), message_chaninfo("CHANINFO", event_chaninfo),
|
||||
message_005("005", event_005), message_442("442", event_442), message_376("376", event_376),
|
||||
- message_pong("PONG", event_pong)
|
||||
+ message_pong("PONG", event_pong), message_squery("SQUERY", ::OnPrivmsg)
|
||||
{
|
||||
this->SetAuthor("Anope");
|
||||
|
||||
--
|
||||
1.7.8.3
|
||||
|
@@ -1,35 +0,0 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2012 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- contrib/Anope/README --
|
||||
|
||||
|
||||
This directory contains two preliminary patches that (re-) add a ngIRCd
|
||||
protocol module to the Anope 1.9 development branch. It has been tested
|
||||
with Anope 1.9.6, there is no guarantee that it will work with other
|
||||
versions as Anope 1.9.x is under heavy development ...
|
||||
|
||||
To build this Anope protocol module, you have to
|
||||
|
||||
- Download the Anope 1.9.x sources (only tested with 1.9.6!),
|
||||
- Patch in the ngIRCd protocol module,
|
||||
- Build and install Anope as usual,
|
||||
- Configure Anope as usual, use "ngircd" as protocol module.
|
||||
|
||||
So the command sequence can be something like this:
|
||||
|
||||
$ tar xzf anope-1.9.6-source.tar.gz
|
||||
$ cd anope-1.9.6-source
|
||||
$ for p in .../ngircd/contrib/Anope/*.patch ; do patch -p1 < $p ; done
|
||||
$ ./Config
|
||||
$ cd build
|
||||
$ make
|
||||
$ make install
|
||||
|
||||
Please have a look at the file doc/Services.txt for more information about
|
||||
how to set up ngIRCd and Anope.
|
3
contrib/Debian/.gitignore
vendored
3
contrib/Debian/.gitignore
vendored
@@ -4,10 +4,13 @@
|
||||
files
|
||||
ngircd/
|
||||
ngircd-full/
|
||||
ngircd.service
|
||||
ngircd-full.default
|
||||
ngircd-full.init
|
||||
ngircd-full.postinst
|
||||
ngircd-full.service
|
||||
ngircd-full-dbg/
|
||||
ngircd-full-dbg.default
|
||||
ngircd-full-dbg.init
|
||||
ngircd-full-dbg.postinst
|
||||
ngircd-full-dbg.service
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
|
||||
# Copyright (c)2001-2017 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# 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
|
||||
@@ -10,7 +10,8 @@
|
||||
#
|
||||
|
||||
EXTRA_DIST = rules changelog compat control copyright \
|
||||
ngircd.init ngircd.default ngircd.pam ngircd.postinst
|
||||
ngircd.init ngircd.default ngircd.pam ngircd.postinst \
|
||||
source/format
|
||||
|
||||
maintainer-clean-local:
|
||||
rm -f Makefile Makefile.in
|
||||
|
@@ -1,3 +1,186 @@
|
||||
ngircd (26-0ab1) unstable; urgency=medium
|
||||
|
||||
* New "upstream" release: ngIRCd 26.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sat, 20 Jun 2020 15:26:46 +0200
|
||||
|
||||
ngircd (26~rc2-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 2 for ngIRCd Release 26.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Thu, 11 Jun 2020 17:21:17 +0200
|
||||
|
||||
ngircd (26~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 26.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sun, 10 May 2020 17:13:17 +0200
|
||||
|
||||
ngircd (25-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 25.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Wed, 23 Jan 2019 23:13:03 +0100
|
||||
|
||||
ngircd (25~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 25.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sat, 11 Aug 2018 21:35:08 +0200
|
||||
|
||||
ngircd (24-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 24.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Fri, 20 Jan 2017 16:43:09 +0100
|
||||
|
||||
ngircd (24~rc1-0ab2) unstable; urgency=low
|
||||
|
||||
* Use OpenSSL instead of GnuTLS for SSL-enabled packages.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Fri, 20 Jan 2017 15:20:07 +0100
|
||||
|
||||
ngircd (24~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 24.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sat, 07 Jan 2017 18:58:02 +0100
|
||||
|
||||
ngircd (23-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 23.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Mon, 16 Nov 2015 21:27:03 +0100
|
||||
|
||||
ngircd (23~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 23.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sun, 06 Sep 2015 16:55:23 +0200
|
||||
|
||||
ngircd (22.1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 22.1.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Mon, 06 Apr 2015 14:34:50 +0200
|
||||
|
||||
ngircd (22-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 22.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sat, 11 Oct 2014 20:29:03 +0200
|
||||
|
||||
ngircd (22~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 22.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Mon, 29 Sep 2014 17:07:55 +0200
|
||||
|
||||
ngircd (21.1-0ab2) unstable; urgency=low
|
||||
|
||||
* Use correct package name in pathname to "HelpFile" (Command.txt)
|
||||
in "ngircd-full" and "ngircd-full-dbg" packages.
|
||||
* Don't adjust path names that are correct by default.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Mon, 14 Jul 2014 11:20:17 +0200
|
||||
|
||||
ngircd (21.1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 21.1.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Tue, 25 Mar 2014 14:44:59 +0100
|
||||
|
||||
ngircd (21-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 21.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Wed, 30 Oct 2013 22:13:55 +0100
|
||||
|
||||
ngircd (21~rc2-0ab3) unstable; urgency=low
|
||||
|
||||
* Fix sed(1) rules adjusting "ngircd-full" package, error introduced
|
||||
by last commit :-/
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sun, 20 Oct 2013 18:31:16 +0200
|
||||
|
||||
ngircd (21~rc2-0ab2) unstable; urgency=low
|
||||
|
||||
* Fix default "HelpFile" file name in ngircd.conf for "full" packages.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sun, 20 Oct 2013 17:18:28 +0200
|
||||
|
||||
ngircd (21~rc2-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 2 for ngIRCd Release 21.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sun, 20 Oct 2013 15:50:03 +0200
|
||||
|
||||
ngircd (21~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 21.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sat, 05 Oct 2013 23:24:09 +0200
|
||||
|
||||
ngircd (20.3-0ab1) unstable; urgency=high
|
||||
|
||||
* New "upstream" release, fixing a security related bug: ngIRCd 20.3.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Fri, 23 Aug 2013 21:53:21 +0200
|
||||
|
||||
ngircd (20.2-0ab1) unstable; urgency=high
|
||||
|
||||
* New "upstream" release, fixing a security related bug: ngIRCd 20.2.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Fri, 15 Feb 2013 12:17:00 +0100
|
||||
|
||||
ngircd (20.1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 20.1.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Wed, 02 Jan 2013 22:37:26 +0100
|
||||
|
||||
ngircd (20-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 20.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Mon, 17 Dec 2012 13:04:15 +0100
|
||||
|
||||
ngircd (20~rc2-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 2 for ngIRCd Release 20.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sun, 02 Dec 2012 18:51:06 +0100
|
||||
|
||||
ngircd (20~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 20.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sun, 11 Nov 2012 16:03:32 +0100
|
||||
|
||||
ngircd (19.2-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 19.2.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Tue, 19 Jun 2012 11:03:12 +0200
|
||||
|
||||
ngircd (19.2~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRC Release 19.2.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Wed, 13 Jun 2012 10:59:34 +0200
|
||||
|
||||
ngircd (19.1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 19.1.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Mon, 19 Mar 2012 19:18:28 +0100
|
||||
|
||||
ngircd (19-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 19.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Wed, 29 Feb 2012 17:34:08 +0100
|
||||
|
||||
ngircd (19~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 19.
|
||||
|
@@ -1 +1 @@
|
||||
4
|
||||
9
|
||||
|
@@ -2,15 +2,16 @@ Source: ngircd
|
||||
Section: net
|
||||
Priority: optional
|
||||
Maintainer: Alexander Barton <alex@barton.de>
|
||||
Build-Depends: debhelper (>> 4.0.0),
|
||||
Build-Depends: debhelper (>> 9.0.0),
|
||||
autotools-dev,
|
||||
dh-systemd (>= 1.5),
|
||||
expect,
|
||||
libz-dev,
|
||||
libwrap0-dev,
|
||||
libident-dev,
|
||||
libgnutls-dev,
|
||||
libpam0g-dev,
|
||||
telnet,
|
||||
libssl-dev,
|
||||
libwrap0-dev,
|
||||
libz-dev,
|
||||
telnet | telnet-ssl,
|
||||
Standards-Version: 3.9.1
|
||||
|
||||
Package: ngircd
|
||||
@@ -18,16 +19,21 @@ Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Provides: ircd
|
||||
Description: lightweight Internet Relay Chat server
|
||||
This package provides ngIRCd, a lightweight Internet Relay Chat
|
||||
server for small or private networks. It is simple to configure, can
|
||||
cope with dynamic IP addresses, and supports IPv6 as well as SSL. It
|
||||
is written from scratch, not based on the original IRCd and quite
|
||||
portable.
|
||||
ngIRCd is a free, portable and lightweight Internet Relay Chat server
|
||||
for small or private networks, developed under the GNU General Public
|
||||
License (GPL).
|
||||
.
|
||||
The server is quite easy to configure, can handle dynamic IP addresses, and
|
||||
optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for
|
||||
user authentication as well as character set conversion for legacy clients. The
|
||||
server has been written from scratch and is not based on the "forefather", the
|
||||
daemon of IRCNet.
|
||||
.
|
||||
This package contains the "standard distribution", including support for
|
||||
syslog logging and compressed server-links using zlib. Please have a look
|
||||
at the "ngircd-full" package if you need advanced functionality like support
|
||||
for IPv6 or SSL.
|
||||
at the "ngircd-full" package if you need "more advanced" functionality like
|
||||
support for TCP wrappers, IDENT requests, the IPv6 protocol, PAM and
|
||||
SSL encrypted client and server links.
|
||||
|
||||
Package: ngircd-full
|
||||
Architecture: any
|
||||
@@ -35,14 +41,18 @@ Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Provides: ircd
|
||||
Conflicts: ngircd, ngircd-dbg
|
||||
Description: lightweight Internet Relay Chat server
|
||||
This package provides ngIRCd, a lightweight Internet Relay Chat
|
||||
server for small or private networks. It is simple to configure, can
|
||||
cope with dynamic IP addresses, and supports IPv6 as well as SSL. It
|
||||
is written from scratch, not based on the original IRCd and quite
|
||||
portable.
|
||||
ngIRCd is a free, portable and lightweight Internet Relay Chat server
|
||||
for small or private networks, developed under the GNU General Public
|
||||
License (GPL).
|
||||
.
|
||||
The server is quite easy to configure, can handle dynamic IP addresses, and
|
||||
optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for
|
||||
user authentication as well as character set conversion for legacy clients. The
|
||||
server has been written from scratch and is not based on the "forefather", the
|
||||
daemon of IRCNet.
|
||||
.
|
||||
In addition to the features of the "standard package", this package
|
||||
includes support for TCP wrappers, IDENT requests, the IPv6 protocol and
|
||||
includes support for TCP wrappers, IDENT requests, the IPv6 protocol, PAM and
|
||||
SSL encrypted client and server links.
|
||||
|
||||
Package: ngircd-full-dbg
|
||||
@@ -51,14 +61,18 @@ Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Provides: ircd
|
||||
Conflicts: ngircd, ngircd-full
|
||||
Description: lightweight Internet Relay Chat server
|
||||
This package provides ngIRCd, a lightweight Internet Relay Chat
|
||||
server for small or private networks. It is simple to configure, can
|
||||
cope with dynamic IP addresses, and supports IPv6 as well as SSL. It
|
||||
is written from scratch, not based on the original IRCd and quite
|
||||
portable.
|
||||
ngIRCd is a free, portable and lightweight Internet Relay Chat server
|
||||
for small or private networks, developed under the GNU General Public
|
||||
License (GPL).
|
||||
.
|
||||
The server is quite easy to configure, can handle dynamic IP addresses, and
|
||||
optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for
|
||||
user authentication as well as character set conversion for legacy clients. The
|
||||
server has been written from scratch and is not based on the "forefather", the
|
||||
daemon of IRCNet.
|
||||
.
|
||||
In addition to the features of the "standard package", this package
|
||||
includes support for TCP wrappers, IDENT requests, the IPv6 protocol and
|
||||
includes support for TCP wrappers, IDENT requests, the IPv6 protocol, PAM and
|
||||
SSL encrypted client and server links.
|
||||
.
|
||||
And in addition to the "full" variant, the binaries contained in this
|
||||
|
@@ -1,8 +1,6 @@
|
||||
#
|
||||
# Defaults for ngIRCd start and stop script
|
||||
#
|
||||
# $Id: ngircd.default,v 1.1 2003/12/31 17:20:11 alex Exp $
|
||||
#
|
||||
|
||||
# Parameters to pass to the ngircd daemon on startup, see ngircd(8) for
|
||||
# possible options (default: empty).
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# ngIRCd start and stop script for Debian-based systems
|
||||
# Copyright 2008-2010 Alexander Barton <alex@barton.de>
|
||||
# Copyright 2008-2015 Alexander Barton <alex@barton.de>
|
||||
#
|
||||
|
||||
### BEGIN INIT INFO
|
||||
@@ -24,20 +24,20 @@ PARAMS=""
|
||||
STARTTIME=1
|
||||
DIETIME=10
|
||||
|
||||
test -x $DAEMON || exit 5
|
||||
|
||||
test -h "$0" && me=`readlink $0` || me="$0"
|
||||
BASENAME=`basename $me`
|
||||
|
||||
test -r /etc/default/$BASENAME && . /etc/default/$BASENAME
|
||||
|
||||
test -x $DAEMON || exit 5
|
||||
|
||||
# LSB compatibility functions that become used if there is no local
|
||||
# include file available.
|
||||
log_daemon_msg() {
|
||||
echo -n "$*"
|
||||
}
|
||||
log_end_msg() {
|
||||
[ "$1" == "0" ] && echo "." || echo " failed!"
|
||||
[ "$1" = "0" ] && echo "." || echo " failed!"
|
||||
}
|
||||
log_failure_msg() {
|
||||
echo "$*"
|
||||
@@ -84,6 +84,7 @@ Do_Start() {
|
||||
log_warning_msg "$NAME seems to be already running, nothing to do."
|
||||
exit 0
|
||||
fi
|
||||
rm -f "$PIDFILE"
|
||||
start-stop-daemon --start \
|
||||
--quiet --exec $DAEMON -- $PARAMS
|
||||
sleep $STARTTIME
|
||||
|
@@ -1,7 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Debian post-installation script
|
||||
# $Id: ngircd.postinst,v 1.2 2006/12/26 14:44:40 alex Exp $
|
||||
#
|
||||
|
||||
set -e
|
||||
@@ -12,6 +11,7 @@ case "$1" in
|
||||
# make sure that the configuration file is not
|
||||
# world-readable, it contains passwords!
|
||||
chmod o= /etc/ngircd/ngircd.conf
|
||||
chgrp irc /etc/ngircd/ngircd.conf
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/make -f
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2009 Alexander Barton <alex@barton.de>
|
||||
# Copyright (c)2001-2016 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# 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
|
||||
@@ -42,6 +42,7 @@ configure-ngircd: configure
|
||||
--prefix=/usr \
|
||||
--sysconfdir=/etc/ngircd \
|
||||
--mandir=\$${prefix}/share/man \
|
||||
--docdir=\$${prefix}/share/doc/ngircd \
|
||||
--with-syslog --with-zlib
|
||||
|
||||
configure-ngircd-full: configure
|
||||
@@ -52,8 +53,10 @@ configure-ngircd-full: configure
|
||||
--prefix=/usr \
|
||||
--sysconfdir=/etc/ngircd \
|
||||
--mandir=\$${prefix}/share/man \
|
||||
--docdir=\$${prefix}/share/doc/ngircd-full \
|
||||
--with-syslog --with-zlib \
|
||||
--with-gnutls --with-ident --with-tcp-wrappers --with-pam \
|
||||
--with-openssl --with-iconv --with-ident --with-tcp-wrappers \
|
||||
--with-pam \
|
||||
--enable-ipv6
|
||||
|
||||
configure-ngircd-full-dbg: configure
|
||||
@@ -64,13 +67,15 @@ configure-ngircd-full-dbg: configure
|
||||
--prefix=/usr \
|
||||
--sysconfdir=/etc/ngircd \
|
||||
--mandir=\$${prefix}/share/man \
|
||||
--docdir=\$${prefix}/share/doc/ngircd-full-dbg \
|
||||
--enable-debug --enable-sniffer \
|
||||
--with-syslog --with-zlib \
|
||||
--with-gnutls --with-ident --with-tcp-wrappers --with-pam \
|
||||
--with-openssl --with-iconv --with-ident --with-tcp-wrappers \
|
||||
--with-pam \
|
||||
--enable-ipv6
|
||||
|
||||
build:
|
||||
dh_clean -k
|
||||
dh_prep
|
||||
|
||||
build-ngircd: build-stamp-ngircd
|
||||
build-stamp-ngircd: configure-ngircd
|
||||
@@ -106,12 +111,15 @@ clean:
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
rm -f build-stamp*
|
||||
rm -f $(CURDIR)/debian/ngircd.service
|
||||
rm -f $(CURDIR)/debian/ngircd-full.default
|
||||
rm -f $(CURDIR)/debian/ngircd-full.init
|
||||
rm -f $(CURDIR)/debian/ngircd-full.postinst
|
||||
rm -f $(CURDIR)/debian/ngircd-full.service
|
||||
rm -f $(CURDIR)/debian/ngircd-full-dbg.default
|
||||
rm -f $(CURDIR)/debian/ngircd-full-dbg.postinst
|
||||
rm -f $(CURDIR)/debian/ngircd-full-dbg.init
|
||||
rm -f $(CURDIR)/debian/ngircd-full-dbg.service
|
||||
|
||||
# Add here commands to clean up after the build process:
|
||||
[ ! -f Makefile ] || $(MAKE) distclean
|
||||
@@ -135,12 +143,10 @@ install-ngircd: build-ngircd
|
||||
$(MAKE) install DESTDIR=$(CURDIR)/debian/ngircd
|
||||
rm $(CURDIR)/debian/ngircd/usr/share/doc/ngircd/INSTALL*
|
||||
rm $(CURDIR)/debian/ngircd/usr/share/doc/ngircd/COPYING*
|
||||
mkdir -p $(CURDIR)/debian/ngircd/var/run/ircd
|
||||
cat $(CURDIR)/debian/ngircd/usr/share/doc/ngircd/sample-ngircd.conf | \
|
||||
sed -e "s/;ServerUID = 65534/ServerUID = irc/g" | \
|
||||
sed -e "s/;ServerGID = 65534/ServerGID = irc/g" | \
|
||||
sed -e "s/;MotdFile = \/usr\/local\/etc\/ngircd.motd/MotdFile = \/etc\/ngircd\/ngircd.motd/g" | \
|
||||
sed -e "s/;PidFile = \/var\/run\/ngircd\/ngircd.pid/PidFile = \/var\/run\/ircd\/ngircd.pid/g" \
|
||||
sed -e "s|;ServerUID = 65534|ServerUID = irc|g" | \
|
||||
sed -e "s|;ServerGID = 65534|ServerGID = irc|g" | \
|
||||
sed -e "s|;PidFile = /var/run/ngircd/ngircd.pid|PidFile = /var/run/ircd/ngircd.pid|g" \
|
||||
>$(CURDIR)/debian/ngircd/etc/ngircd/ngircd.conf
|
||||
touch $(CURDIR)/debian/ngircd/etc/ngircd/ngircd.motd
|
||||
|
||||
@@ -151,16 +157,12 @@ install-ngircd-full: build-ngircd-full
|
||||
|
||||
# Add here commands to install the "full" package into debian/ngircd-full:
|
||||
$(MAKE) install DESTDIR=$(CURDIR)/debian/ngircd-full
|
||||
rm $(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd/INSTALL*
|
||||
rm $(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd/COPYING*
|
||||
mv $(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd \
|
||||
$(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd-full
|
||||
mkdir -p $(CURDIR)/debian/ngircd-full/var/run/ircd
|
||||
rm $(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd-full/INSTALL*
|
||||
rm $(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd-full/COPYING*
|
||||
cat $(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd-full/sample-ngircd.conf | \
|
||||
sed -e "s/;ServerUID = 65534/ServerUID = irc/g" | \
|
||||
sed -e "s/;ServerGID = 65534/ServerGID = irc/g" | \
|
||||
sed -e "s/;MotdFile = \/usr\/local\/etc\/ngircd.motd/MotdFile = \/etc\/ngircd\/ngircd.motd/g" | \
|
||||
sed -e "s/;PidFile = \/var\/run\/ngircd\/ngircd.pid/PidFile = \/var\/run\/ircd\/ngircd.pid/g" \
|
||||
sed -e "s|;ServerUID = 65534|ServerUID = irc|g" | \
|
||||
sed -e "s|;ServerGID = 65534|ServerGID = irc|g" | \
|
||||
sed -e "s|;PidFile = /var/run/ngircd/ngircd.pid|PidFile = /var/run/ircd/ngircd.pid|g" \
|
||||
>$(CURDIR)/debian/ngircd-full/etc/ngircd/ngircd.conf
|
||||
touch $(CURDIR)/debian/ngircd-full/etc/ngircd/ngircd.motd
|
||||
mkdir -p $(CURDIR)/debian/ngircd-full/etc/pam.d
|
||||
@@ -173,16 +175,12 @@ install-ngircd-full-dbg: build-ngircd-full-dbg
|
||||
|
||||
# Add here commands to install the "full" package into debian/ngircd-full:
|
||||
$(MAKE) install DESTDIR=$(CURDIR)/debian/ngircd-full-dbg
|
||||
rm $(CURDIR)/debian/ngircd-full-dbg/usr/share/doc/ngircd/INSTALL*
|
||||
rm $(CURDIR)/debian/ngircd-full-dbg/usr/share/doc/ngircd/COPYING*
|
||||
mv $(CURDIR)/debian/ngircd-full-dbg/usr/share/doc/ngircd \
|
||||
$(CURDIR)/debian/ngircd-full-dbg/usr/share/doc/ngircd-full-dbg
|
||||
mkdir -p $(CURDIR)/debian/ngircd-full-dbg/var/run/ircd
|
||||
rm $(CURDIR)/debian/ngircd-full-dbg/usr/share/doc/ngircd-full-dbg/INSTALL*
|
||||
rm $(CURDIR)/debian/ngircd-full-dbg/usr/share/doc/ngircd-full-dbg/COPYING*
|
||||
cat $(CURDIR)/debian/ngircd-full-dbg/usr/share/doc/ngircd-full-dbg/sample-ngircd.conf | \
|
||||
sed -e "s/;ServerUID = 65534/ServerUID = irc/g" | \
|
||||
sed -e "s/;ServerGID = 65534/ServerGID = irc/g" | \
|
||||
sed -e "s/;MotdFile = \/usr\/local\/etc\/ngircd.motd/MotdFile = \/etc\/ngircd\/ngircd.motd/g" | \
|
||||
sed -e "s/;PidFile = \/var\/run\/ngircd\/ngircd.pid/PidFile = \/var\/run\/ircd\/ngircd.pid/g" \
|
||||
sed -e "s|;ServerUID = 65534|ServerUID = irc|g" | \
|
||||
sed -e "s|;ServerGID = 65534|ServerGID = irc|g" | \
|
||||
sed -e "s|;PidFile = /var/run/ngircd/ngircd.pid|PidFile = /var/run/ircd/ngircd.pid|g" \
|
||||
>$(CURDIR)/debian/ngircd-full-dbg/etc/ngircd/ngircd.conf
|
||||
touch $(CURDIR)/debian/ngircd-full-dbg/etc/ngircd/ngircd.motd
|
||||
mkdir -p $(CURDIR)/debian/ngircd-full-dbg/etc/pam.d
|
||||
@@ -194,12 +192,18 @@ binary-indep:
|
||||
|
||||
# Build architecture-dependent files here.
|
||||
binary-arch: build install
|
||||
ln -s $(CURDIR)/contrib/ngircd.service \
|
||||
$(CURDIR)/debian/ngircd.service
|
||||
|
||||
ln -s $(CURDIR)/debian/ngircd.default \
|
||||
$(CURDIR)/debian/ngircd-full.default
|
||||
ln -s $(CURDIR)/debian/ngircd.init \
|
||||
$(CURDIR)/debian/ngircd-full.init
|
||||
ln -s $(CURDIR)/debian/ngircd.postinst \
|
||||
$(CURDIR)/debian/ngircd-full.postinst
|
||||
cp $(CURDIR)/contrib/ngircd.service \
|
||||
$(CURDIR)/debian/ngircd-full.service
|
||||
echo "Alias=ngircd.service" >>$(CURDIR)/debian/ngircd-full.service
|
||||
|
||||
ln -s $(CURDIR)/debian/ngircd.default \
|
||||
$(CURDIR)/debian/ngircd-full-dbg.default
|
||||
@@ -207,14 +211,19 @@ binary-arch: build install
|
||||
$(CURDIR)/debian/ngircd-full-dbg.init
|
||||
ln -s $(CURDIR)/debian/ngircd.postinst \
|
||||
$(CURDIR)/debian/ngircd-full-dbg.postinst
|
||||
cp $(CURDIR)/contrib/ngircd.service \
|
||||
$(CURDIR)/debian/ngircd-full-dbg.service
|
||||
echo "Alias=ngircd.service" >>$(CURDIR)/debian/ngircd-full-dbg.service
|
||||
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_installchangelogs -a -A ChangeLog
|
||||
dh_installdocs -a
|
||||
dh_systemd_enable -a
|
||||
dh_installinit -a
|
||||
dh_systemd_start -a
|
||||
dh_strip -a --no-package=ngircd-full-dbg
|
||||
dh_compress -a
|
||||
dh_compress -a -XCommands.txt
|
||||
dh_fixperms -a
|
||||
dh_installdeb -a
|
||||
dh_shlibdeps -a
|
||||
@@ -224,6 +233,6 @@ binary-arch: build install
|
||||
|
||||
binary: binary-indep binary-arch
|
||||
|
||||
.PHONY: build clean binary-indep binary-arch binary install
|
||||
.PHONY: build clean binary-indep binary-arch binary install
|
||||
|
||||
# -eof-
|
||||
|
1
contrib/Debian/source/format
Normal file
1
contrib/Debian/source/format
Normal file
@@ -0,0 +1 @@
|
||||
1.0
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* 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
|
||||
@@ -11,17 +11,23 @@
|
||||
* Static configuration file for Mac OS X Xcode project
|
||||
*/
|
||||
|
||||
#define PACKAGE_NAME "ngircd"
|
||||
#define PACKAGE_NAME "ngIRCd"
|
||||
# define PACKAGE "ngircd"
|
||||
#ifndef VERSION
|
||||
#define VERSION "??("__DATE__")"
|
||||
# define VERSION "??("__DATE__")"
|
||||
#endif
|
||||
#define SYSCONFDIR "/etc/ngircd"
|
||||
|
||||
#ifndef TARGET_VENDOR
|
||||
#define TARGET_VENDOR "apple"
|
||||
#define TARGET_OS "darwin"
|
||||
#ifndef HOST_VENDOR
|
||||
# define HOST_VENDOR "apple"
|
||||
# define HOST_OS "darwin"
|
||||
# ifdef __x86_64
|
||||
# define HOST_CPU "x86_64"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define SYSCONFDIR "/etc/ngircd"
|
||||
#define DOCDIR "/usr/share/doc/ngircd"
|
||||
|
||||
/* -- Build options -- */
|
||||
|
||||
/* Define if debug-mode should be enabled */
|
||||
@@ -51,6 +57,9 @@
|
||||
/* Define if PAM should be used */
|
||||
#define PAM 1
|
||||
|
||||
/* Define if libiconv can be used, e.g. for CHARCONV */
|
||||
#define ICONV 1
|
||||
|
||||
/* -- Supported features -- */
|
||||
|
||||
/* Define if SSP C support is enabled. */
|
||||
@@ -76,6 +85,8 @@
|
||||
|
||||
/* Define to 1 if you have the `gai_strerror' function. */
|
||||
#define HAVE_GAI_STRERROR 1
|
||||
/* Define to 1 if you have the `iconv_open' function. */
|
||||
#define HAVE_ICONV_OPEN 1
|
||||
/* Define to 1 if you have the `kqueue' function. */
|
||||
#define HAVE_KQUEUE 1
|
||||
/* Define to 1 if you have the `inet_ntoa' function. */
|
||||
@@ -94,10 +105,16 @@
|
||||
#define HAVE_INET_ATON 1
|
||||
/* Define to 1 if you have the `getaddrinfo' function. */
|
||||
#define HAVE_GETADDRINFO 1
|
||||
/* getaddrinfo(0) */
|
||||
#define HAVE_WORKING_GETADDRINFO 1
|
||||
/* Define to 1 if you have the `getnameinfo' function. */
|
||||
#define HAVE_GETNAMEINFO 1
|
||||
/* Define to 1 if you have the `sigaction' function. */
|
||||
#define HAVE_SIGACTION 1
|
||||
/* Define to 1 if you have the `setsid' function. */
|
||||
#define HAVE_SETSID 1
|
||||
/* Define to 1 if you have the `strsignal' function. */
|
||||
#define HAVE_STRSIGNAL 1
|
||||
|
||||
/* Define if socklen_t exists */
|
||||
#define HAVE_socklen_t 1
|
||||
|
@@ -1 +1 @@
|
||||
<pkg-contents spec="1.12"><f n="ngircd.dest" o="root" g="admin" p="16877" pt="/Users/alex/Develop/ngircd/alex.git/ngircd.dest" m="false" t="file"><f n="opt" o="root" g="admin" p="16877"><f n="ngircd" o="root" g="admin" p="16877"><f n="etc" o="root" g="admin" p="16877"><f n="ngircd.motd" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><f n="sbin" o="root" g="admin" p="16877"><f n="ngircd" o="root" g="admin" p="33261"><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><f n="share" o="root" g="admin" p="16877"><f n="doc" o="root" g="admin" p="16877"><f n="ngircd" o="root" g="admin" p="16877"><f n="AUTHORS" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="Bopm.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="ChangeLog" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="COPYING" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="FAQ.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="GIT.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="HowToRelease.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="INSTALL" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="NEWS" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="PAM.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="Platforms.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="Protocol.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="README" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="README-AUX.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="README-BeOS.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="README-Interix.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="RFC.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="sample-ngircd.conf" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="Services.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="SSL.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><f n="man" o="root" g="admin" p="16877"><f n="man5" o="root" g="admin" p="16877"><f n="ngircd.conf.5" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><f n="man8" o="root" g="admin" p="16877"><f n="ngircd.8" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f></pkg-contents>
|
||||
<pkg-contents spec="1.12"><f n="ngircd.dest" o="root" g="admin" p="16877" pt="../../ngircd.dest" m="false" t="file"><f n="opt" o="root" g="admin" p="16877"><f n="ngircd" o="root" g="admin" p="16877"><f n="etc" o="root" g="admin" p="16877"><f n="ngircd.motd" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><f n="sbin" o="root" g="admin" p="16877"><f n="ngircd" o="root" g="admin" p="33261"><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><f n="share" o="root" g="admin" p="16877"><f n="doc" o="root" g="admin" p="16877"><f n="ngircd" o="root" g="admin" p="16877"><f n="AUTHORS" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="Bopm.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="ChangeLog" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="COPYING" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="FAQ.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="GIT.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="HowToRelease.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="INSTALL" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="NEWS" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="PAM.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="Platforms.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="Protocol.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="README" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="README-AUX.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="README-BeOS.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="README-Interix.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="RFC.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="sample-ngircd.conf" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="Services.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><f n="SSL.txt" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><f n="man" o="root" g="admin" p="16877"><f n="man5" o="root" g="admin" p="16877"><f n="ngircd.conf.5" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><f n="man8" o="root" g="admin" p="16877"><f n="ngircd.8" o="root" g="admin" p="33188"><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f></pkg-contents>
|
@@ -1 +1 @@
|
||||
<pkgref spec="1.12" uuid="46208410-4A1B-48C6-97BD-DE284F13F864"><config><identifier>de.barton.ngircd.daemon.pkg</identifier><version>17.1</version><description></description><post-install type="none"/><requireAuthorization/><installFrom>/Users/alex/Develop/ngircd/alex.git/ngircd.dest</installFrom><installTo mod="true">/</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"></packageStore><mod>extraFiles</mod><mod>installTo</mod><mod>installTo.isAbsoluteType</mod><mod>scripts.preinstall.path</mod><mod>identifier</mod><mod>parent</mod><mod>version</mod><mod>installTo.path</mod><mod>scripts.preupgrade.path</mod><mod>requireAuthorization</mod></config><contents><file-list>02ngircd-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents><extra-files/></pkgref>
|
||||
<pkgref spec="1.12" uuid="46208410-4A1B-48C6-97BD-DE284F13F864"><config><identifier>de.barton.ngircd.daemon.pkg</identifier><version>17.1</version><description></description><post-install type="none"/><requireAuthorization/><installFrom>../../ngircd.dest</installFrom><installTo mod="true">/</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"></packageStore><mod>extraFiles</mod><mod>installTo</mod><mod>installTo.isAbsoluteType</mod><mod>scripts.preinstall.path</mod><mod>identifier</mod><mod>parent</mod><mod>version</mod><mod>installTo.path</mod><mod>scripts.preupgrade.path</mod><mod>requireAuthorization</mod></config><contents><file-list>02ngircd-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents><extra-files/></pkgref>
|
@@ -1,11 +1,11 @@
|
||||
<pkmkdoc spec="1.12"><properties><title>ngIRCd</title><build>/Users/alex/Desktop/ngIRCd.mpkg</build><organization>de.barton.ngircd</organization><userSees ui="both"/><min-target os="2"/><domain system="true"/></properties><distribution><versions min-spec="1.000000"/><scripts></scripts></distribution><description>ngIRCd – next generation Internet Relay Chat (IRC) server
|
||||
daemon</description><contents><choice title="ngIRCd daemon" id="choicengircd" tooltip="ngIRCd daemon, documentation and manual pages" description="Binaries, documentation and manual pages of the ngIRCd, the next generation IRC (Internet Relay Chat) daemon. This package will be installed into /opt/ngircd." starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="de.barton.ngircd.daemon.pkg"/></choice><choice title="Start and stop script" id="choicelaunchscript" tooltip="LaunchDaemon start and stop script" description="Installs the ngIRCd start and stop script for the "launch daemon". If this is an update/upgrade, and ngIRCd is already running, it will be automatically restarted." starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="de.barton.ngircd.launchscript.pkg"/></choice></contents><resources bg-scale="none" bg-align="bottomleft"><locale lang="en"><resource type="background">/Users/alex/Develop/ngircd/alex.git/contrib/ngIRCd-Logo.gif</resource><resource mime-type="text/rtf" kind="embedded" type="license"><![CDATA[{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
|
||||
<pkmkdoc spec="1.12"><properties><title>ngIRCd</title><build>../../ngIRCd.mpkg</build><organization>de.barton.ngircd</organization><userSees ui="both"/><min-target os="2"/><domain system="true"/></properties><distribution><versions min-spec="1.000000"/><scripts></scripts></distribution><description>ngIRCd – next generation Internet Relay Chat (IRC) server
|
||||
daemon</description><contents><choice title="ngIRCd daemon" id="choicengircd" tooltip="ngIRCd daemon, documentation and manual pages" description="Binaries, documentation and manual pages of the ngIRCd, the next generation IRC (Internet Relay Chat) daemon. This package will be installed into /opt/ngircd." starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="de.barton.ngircd.daemon.pkg"/></choice><choice title="Start and stop script" id="choicelaunchscript" tooltip="LaunchDaemon start and stop script" description="Installs the ngIRCd start and stop script for the "launch daemon". If this is an update/upgrade, and ngIRCd is already running, it will be automatically restarted." starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="de.barton.ngircd.launchscript.pkg"/></choice></contents><resources bg-scale="none" bg-align="bottomleft"><locale lang="en"><resource type="background">../ngIRCd-Logo.gif</resource><resource mime-type="text/rtf" kind="embedded" type="license"><![CDATA[{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
|
||||
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\qc\pardirnatural
|
||||
|
||||
\f0\i\fs24 \cf0 ngIRCd -- The Next Generation IRC Daemon\
|
||||
Copyright (c)2001-2011 Alexander Barton and Contributors.\
|
||||
Copyright (c)2001-2014 Alexander Barton and Contributors.\
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural
|
||||
|
||||
\i0 \cf0 \
|
||||
@@ -156,7 +156,7 @@ Each version is given a distinguishing version number. If the Program specifies
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
|
||||
|
||||
\f0\fs26 \cf0 Please not:\
|
||||
\f0\fs26 \cf0 Please note:\
|
||||
\
|
||||
\pard\tx260\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li260\fi-260\ql\qnatural\pardirnatural
|
||||
\cf0 \'95 You
|
||||
|
@@ -36,33 +36,43 @@
|
||||
FA322DBE0CEF7766001761B3 /* tool.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D330CEF74B1001761B3 /* tool.c */; };
|
||||
FA322DC10CEF77CB001761B3 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FA322DC00CEF77CB001761B3 /* libz.dylib */; };
|
||||
FA407F2E0DB159F400271AF1 /* ng_ipaddr.c in Sources */ = {isa = PBXBuildFile; fileRef = FA407F2C0DB159F400271AF1 /* ng_ipaddr.c */; };
|
||||
FA4F165A164836B100DBD011 /* irc-metadata.c in Sources */ = {isa = PBXBuildFile; fileRef = FA4F1659164836B100DBD011 /* irc-metadata.c */; };
|
||||
FA6BBC631605F0AC0004247A /* conn-encoding.c in Sources */ = {isa = PBXBuildFile; fileRef = FA6BBC5F1605F0AB0004247A /* conn-encoding.c */; };
|
||||
FA6BBC641605F0AC0004247A /* irc-encoding.c in Sources */ = {isa = PBXBuildFile; fileRef = FA6BBC611605F0AC0004247A /* irc-encoding.c */; };
|
||||
FA6BBC661605F6D60004247A /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FA6BBC651605F6D60004247A /* libiconv.dylib */; };
|
||||
FA85178C0FA061EC006A1F5A /* op.c in Sources */ = {isa = PBXBuildFile; fileRef = FA85178B0FA061EC006A1F5A /* op.c */; };
|
||||
FA99428C10E82A27007F27ED /* proc.c in Sources */ = {isa = PBXBuildFile; fileRef = FA99428B10E82A27007F27ED /* proc.c */; };
|
||||
FAA3D27B0F139CDC00B2447E /* conn-ssl.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA3D2790F139CDC00B2447E /* conn-ssl.c */; };
|
||||
FAA97C57124A271400D5BBA9 /* sighandlers.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA97C55124A271400D5BBA9 /* sighandlers.c */; };
|
||||
FAACD5F514A6099C006ED74F /* class.c in Sources */ = {isa = PBXBuildFile; fileRef = FAACD5F314A6099C006ED74F /* class.c */; };
|
||||
FAD5853215271AAB00328741 /* client-cap.c in Sources */ = {isa = PBXBuildFile; fileRef = FAD5853015271AAB00328741 /* client-cap.c */; };
|
||||
FAD5853515271AB800328741 /* irc-cap.c in Sources */ = {isa = PBXBuildFile; fileRef = FAD5853315271AB800328741 /* irc-cap.c */; };
|
||||
FAD5853815272C2600328741 /* login.c in Sources */ = {isa = PBXBuildFile; fileRef = FAD5853615272C2500328741 /* login.c */; };
|
||||
FAE5CC2E0CF2308A007D69B6 /* numeric.c in Sources */ = {isa = PBXBuildFile; fileRef = FAE5CC2D0CF2308A007D69B6 /* numeric.c */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
8DD76FAF0486AB0100D96B5E /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 8;
|
||||
dstPath = /usr/share/man/man1/;
|
||||
dstSubfolderSpec = 0;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 1;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
FA1A6BBC0D6857BB00AA8F71 /* misc-test.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "misc-test.e"; sourceTree = "<group>"; };
|
||||
FA18A63E16CEDDCE00132F66 /* configure.ng */ = {isa = PBXFileReference; lastKnownFileType = text; name = configure.ng; path = ../../configure.ng; sourceTree = "<group>"; };
|
||||
FA18A63F16CEDE2300132F66 /* ngircd.service */ = {isa = PBXFileReference; lastKnownFileType = text; path = ngircd.service; sourceTree = "<group>"; };
|
||||
FA18A64016CEDE2300132F66 /* ngircd.socket */ = {isa = PBXFileReference; lastKnownFileType = text; path = ngircd.socket; sourceTree = "<group>"; };
|
||||
FA18A64116CEDE3500132F66 /* ngircd.pam */ = {isa = PBXFileReference; lastKnownFileType = text; path = ngircd.pam; sourceTree = "<group>"; };
|
||||
FA18A64216CEDE5700132F66 /* de.barton.ngircd.plist.tmpl */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = de.barton.ngircd.plist.tmpl; sourceTree = "<group>"; };
|
||||
FA18A64316CEDE8100132F66 /* Makefile.am */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA18A64416CEDFCE00132F66 /* Commands.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Commands.txt; sourceTree = "<group>"; };
|
||||
FA18A64516CEE0C700132F66 /* Makefile.ng */ = {isa = PBXFileReference; lastKnownFileType = text; name = Makefile.ng; path = ipaddr/Makefile.ng; sourceTree = "<group>"; };
|
||||
FA18A64616CEE0DD00132F66 /* Makefile.ng */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.ng; sourceTree = "<group>"; };
|
||||
FA18A64716CEE14900132F66 /* Makefile.ng */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.ng; sourceTree = "<group>"; };
|
||||
FA18A64A16CEE18100132F66 /* Makefile.ng */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.ng; sourceTree = "<group>"; };
|
||||
FA18A64C16CEE1AC00132F66 /* mode-test.e */ = {isa = PBXFileReference; lastKnownFileType = text; path = "mode-test.e"; sourceTree = "<group>"; };
|
||||
FA18A64D16CEE1D900132F66 /* whois-test.e */ = {isa = PBXFileReference; lastKnownFileType = text; path = "whois-test.e"; sourceTree = "<group>"; };
|
||||
FA18A64E16CEE24B00132F66 /* misc-test.e */ = {isa = PBXFileReference; lastKnownFileType = text; path = "misc-test.e"; sourceTree = "<group>"; };
|
||||
FA18A64F16CEE27700132F66 /* Makefile.ng */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.ng; sourceTree = "<group>"; };
|
||||
FA1A6BBD0D6857D900AA8F71 /* who-test.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "who-test.e"; sourceTree = "<group>"; };
|
||||
FA1DBB6716C707D200D4F838 /* irc-macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "irc-macros.h"; sourceTree = "<group>"; };
|
||||
FA2D564811EA158B00D37A35 /* pam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pam.h; sourceTree = "<group>"; };
|
||||
FA2D564911EA158B00D37A35 /* pam.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pam.c; sourceTree = "<group>"; };
|
||||
FA2D567A11EA1AB300D37A35 /* libpam.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpam.dylib; path = usr/lib/libpam.dylib; sourceTree = SDKROOT; };
|
||||
FA322BBA0CEF72E4001761B3 /* ngIRCd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ngIRCd; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
FA322BBA0CEF72E4001761B3 /* ngircd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ngircd; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
FA322CD60CEF74B1001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA322CD90CEF74B1001761B3 /* array.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = array.c; sourceTree = "<group>"; };
|
||||
FA322CDA0CEF74B1001761B3 /* array.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = array.h; sourceTree = "<group>"; };
|
||||
@@ -105,7 +115,6 @@
|
||||
FA322CFF0CEF74B1001761B3 /* lists.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = lists.h; sourceTree = "<group>"; };
|
||||
FA322D000CEF74B1001761B3 /* log.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = log.c; sourceTree = "<group>"; };
|
||||
FA322D010CEF74B1001761B3 /* log.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
|
||||
FA322D020CEF74B1001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA322D030CEF74B1001761B3 /* match.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = match.c; sourceTree = "<group>"; };
|
||||
FA322D040CEF74B1001761B3 /* match.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = match.h; sourceTree = "<group>"; };
|
||||
FA322D050CEF74B1001761B3 /* messages.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = messages.h; sourceTree = "<group>"; };
|
||||
@@ -117,9 +126,6 @@
|
||||
FA322D0D0CEF74B1001761B3 /* resolve.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = resolve.h; sourceTree = "<group>"; };
|
||||
FA322D100CEF74B1001761B3 /* ansi2knr.1 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.man; path = ansi2knr.1; sourceTree = "<group>"; };
|
||||
FA322D110CEF74B1001761B3 /* ansi2knr.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = ansi2knr.c; sourceTree = "<group>"; };
|
||||
FA322D120CEF74B1001761B3 /* exp.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = exp.h; sourceTree = "<group>"; };
|
||||
FA322D130CEF74B1001761B3 /* imp.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = imp.h; sourceTree = "<group>"; };
|
||||
FA322D140CEF74B1001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA322D150CEF74B1001761B3 /* portab.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = portab.h; sourceTree = "<group>"; };
|
||||
FA322D160CEF74B1001761B3 /* portabtest.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = portabtest.c; sourceTree = "<group>"; };
|
||||
FA322D170CEF74B1001761B3 /* splint.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = splint.h; sourceTree = "<group>"; };
|
||||
@@ -131,8 +137,6 @@
|
||||
FA322D1F0CEF74B1001761B3 /* connect-test.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "connect-test.e"; sourceTree = "<group>"; };
|
||||
FA322D200CEF74B1001761B3 /* functions.inc */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.pascal; path = functions.inc; sourceTree = "<group>"; };
|
||||
FA322D210CEF74B1001761B3 /* getpid.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = getpid.sh; sourceTree = "<group>"; };
|
||||
FA322D220CEF74B1001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA322D230CEF74B1001761B3 /* mode-test.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "mode-test.e"; sourceTree = "<group>"; };
|
||||
FA322D250CEF74B1001761B3 /* README */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
|
||||
FA322D260CEF74B1001761B3 /* start-server.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = "start-server.sh"; sourceTree = "<group>"; };
|
||||
FA322D270CEF74B1001761B3 /* stop-server.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = "stop-server.sh"; sourceTree = "<group>"; };
|
||||
@@ -142,9 +146,6 @@
|
||||
FA322D2B0CEF74B1001761B3 /* test-loop.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = "test-loop.sh"; sourceTree = "<group>"; };
|
||||
FA322D2C0CEF74B1001761B3 /* tests.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = tests.sh; sourceTree = "<group>"; };
|
||||
FA322D2D0CEF74B1001761B3 /* wait-tests.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = "wait-tests.sh"; sourceTree = "<group>"; };
|
||||
FA322D300CEF74B1001761B3 /* ansi2knr.1 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.man; path = ansi2knr.1; sourceTree = "<group>"; };
|
||||
FA322D310CEF74B1001761B3 /* ansi2knr.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = ansi2knr.c; sourceTree = "<group>"; };
|
||||
FA322D320CEF74B1001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA322D330CEF74B1001761B3 /* tool.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = tool.c; sourceTree = "<group>"; };
|
||||
FA322D340CEF74B1001761B3 /* tool.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = tool.h; sourceTree = "<group>"; };
|
||||
FA322D5A0CEF750F001761B3 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = AUTHORS; path = ../../AUTHORS; sourceTree = SOURCE_ROOT; };
|
||||
@@ -152,12 +153,11 @@
|
||||
FA322D5C0CEF750F001761B3 /* ChangeLog */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = ChangeLog; path = ../../ChangeLog; sourceTree = SOURCE_ROOT; };
|
||||
FA322D5E0CEF750F001761B3 /* config.guess */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = config.guess; path = ../../config.guess; sourceTree = SOURCE_ROOT; };
|
||||
FA322D5F0CEF750F001761B3 /* config.sub */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = config.sub; path = ../../config.sub; sourceTree = SOURCE_ROOT; };
|
||||
FA322D600CEF750F001761B3 /* configure.in */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = configure.in; path = ../../configure.in; sourceTree = SOURCE_ROOT; };
|
||||
FA322D610CEF750F001761B3 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = COPYING; path = ../../COPYING; sourceTree = SOURCE_ROOT; };
|
||||
FA322D620CEF750F001761B3 /* INSTALL */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = INSTALL; path = ../../INSTALL; sourceTree = SOURCE_ROOT; };
|
||||
FA322D620CEF750F001761B3 /* INSTALL.md */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = net.daringfireball.markdown; name = INSTALL.md; path = ../../INSTALL.md; sourceTree = SOURCE_ROOT; };
|
||||
FA322D630CEF750F001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../../Makefile.am; sourceTree = SOURCE_ROOT; };
|
||||
FA322D640CEF750F001761B3 /* NEWS */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = NEWS; path = ../../NEWS; sourceTree = SOURCE_ROOT; };
|
||||
FA322D650CEF750F001761B3 /* README */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = README; path = ../../README; sourceTree = SOURCE_ROOT; };
|
||||
FA322D650CEF750F001761B3 /* README.md */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../../README.md; sourceTree = SOURCE_ROOT; };
|
||||
FA322D6A0CEF7523001761B3 /* changelog */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = changelog; sourceTree = "<group>"; };
|
||||
FA322D6B0CEF7523001761B3 /* compat */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = compat; sourceTree = "<group>"; };
|
||||
FA322D6C0CEF7523001761B3 /* control */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = control; sourceTree = "<group>"; };
|
||||
@@ -167,13 +167,10 @@
|
||||
FA322D700CEF7523001761B3 /* ngircd.init */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = ngircd.init; sourceTree = "<group>"; };
|
||||
FA322D710CEF7523001761B3 /* ngircd.postinst */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = ngircd.postinst; sourceTree = "<group>"; };
|
||||
FA322D720CEF7523001761B3 /* rules */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = rules; sourceTree = "<group>"; };
|
||||
FA322D8D0CEF7523001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA322D8E0CEF7523001761B3 /* ngIRCd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = ngIRCd.xcodeproj; sourceTree = "<group>"; };
|
||||
FA322D910CEF7523001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA322D920CEF7523001761B3 /* ngindent */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngindent; sourceTree = "<group>"; };
|
||||
FA322D920CEF7523001761B3 /* ngindent.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = ngindent.sh; sourceTree = "<group>"; };
|
||||
FA322D940CEF7523001761B3 /* ngircd.spec */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngircd.spec; sourceTree = "<group>"; };
|
||||
FA322D950CEF7523001761B3 /* README */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
|
||||
FA322D960CEF7523001761B3 /* systrace.policy */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = systrace.policy; sourceTree = "<group>"; };
|
||||
FA322D9A0CEF752C001761B3 /* FAQ.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = FAQ.txt; sourceTree = "<group>"; };
|
||||
FA322D9B0CEF752C001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA322D9C0CEF752C001761B3 /* Platforms.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Platforms.txt; sourceTree = "<group>"; };
|
||||
@@ -183,24 +180,31 @@
|
||||
FA322DA00CEF752C001761B3 /* RFC.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = RFC.txt; sourceTree = "<group>"; };
|
||||
FA322DA40CEF752C001761B3 /* Doxyfile */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Doxyfile; sourceTree = "<group>"; };
|
||||
FA322DA50CEF752C001761B3 /* footer.inc.html */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.html; path = footer.inc.html; sourceTree = "<group>"; };
|
||||
FA322DA60CEF752C001761B3 /* header.inc.html */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.html; path = header.inc.html; sourceTree = "<group>"; };
|
||||
FA322DA70CEF752C001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA322DA80CEF752C001761B3 /* ngircd-doc.css */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.css; path = "ngircd-doc.css"; sourceTree = "<group>"; };
|
||||
FA322DA90CEF752C001761B3 /* SSL.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = SSL.txt; sourceTree = "<group>"; };
|
||||
FA322DAD0CEF7538001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA322DAE0CEF7538001761B3 /* ngircd.8.tmpl */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngircd.8.tmpl; sourceTree = "<group>"; };
|
||||
FA322DAF0CEF7538001761B3 /* ngircd.conf.5.tmpl */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngircd.conf.5.tmpl; sourceTree = "<group>"; };
|
||||
FA322DB10CEF7565001761B3 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
|
||||
FA322DC00CEF77CB001761B3 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
|
||||
FA407F2B0DB159F400271AF1 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ipaddr/Makefile.am; sourceTree = "<group>"; };
|
||||
FA407F2C0DB159F400271AF1 /* ng_ipaddr.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ng_ipaddr.c; path = ipaddr/ng_ipaddr.c; sourceTree = "<group>"; };
|
||||
FA407F2D0DB159F400271AF1 /* ng_ipaddr.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = ng_ipaddr.h; path = ipaddr/ng_ipaddr.h; sourceTree = "<group>"; };
|
||||
FA407F380DB15AC700271AF1 /* GIT.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = GIT.txt; sourceTree = "<group>"; };
|
||||
FA4B08E513E7F8FB00765BA3 /* ngircd-bsd.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "ngircd-bsd.sh"; sourceTree = "<group>"; };
|
||||
FA4B08E613E7F91700765BA3 /* ngIRCd-Logo.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "ngIRCd-Logo.gif"; sourceTree = "<group>"; };
|
||||
FA4B08E713E7F91700765BA3 /* ngircd-redhat.init */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "ngircd-redhat.init"; sourceTree = "<group>"; };
|
||||
FA4B08E813E7F91C00765BA3 /* platformtest.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = platformtest.sh; sourceTree = "<group>"; };
|
||||
FA4B4F542055B47C00A04296 /* ngircd.logcheck */ = {isa = PBXFileReference; lastKnownFileType = text; path = ngircd.logcheck; sourceTree = "<group>"; };
|
||||
FA4B4F552055B4C800A04296 /* source */ = {isa = PBXFileReference; lastKnownFileType = folder; path = source; sourceTree = "<group>"; };
|
||||
FA4F1659164836B100DBD011 /* irc-metadata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "irc-metadata.c"; sourceTree = "<group>"; };
|
||||
FA4F165C164836BF00DBD011 /* irc-metadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "irc-metadata.h"; sourceTree = "<group>"; };
|
||||
FA6BBC5F1605F0AB0004247A /* conn-encoding.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "conn-encoding.c"; sourceTree = "<group>"; };
|
||||
FA6BBC601605F0AC0004247A /* conn-encoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "conn-encoding.h"; sourceTree = "<group>"; };
|
||||
FA6BBC611605F0AC0004247A /* irc-encoding.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "irc-encoding.c"; sourceTree = "<group>"; };
|
||||
FA6BBC621605F0AC0004247A /* irc-encoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "irc-encoding.h"; sourceTree = "<group>"; };
|
||||
FA6BBC651605F6D60004247A /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = ../../../../../../../usr/lib/libiconv.dylib; sourceTree = "<group>"; };
|
||||
FA77849A133FB9FF00740057 /* sample-ngircd.conf.tmpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "sample-ngircd.conf.tmpl"; sourceTree = "<group>"; };
|
||||
FA7E9FEE242FFC4500A04296 /* server-link-test.e */ = {isa = PBXFileReference; lastKnownFileType = text; path = "server-link-test.e"; sourceTree = "<group>"; };
|
||||
FA7E9FF0242FFC6C00A04296 /* server-login-test.e */ = {isa = PBXFileReference; lastKnownFileType = text; path = "server-login-test.e"; sourceTree = "<group>"; };
|
||||
FA85178A0FA061EC006A1F5A /* op.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = op.h; sourceTree = "<group>"; };
|
||||
FA85178B0FA061EC006A1F5A /* op.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = op.c; sourceTree = "<group>"; };
|
||||
FA99428A10E82A27007F27ED /* proc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = proc.h; sourceTree = "<group>"; };
|
||||
@@ -229,8 +233,23 @@
|
||||
FAA3D28B0F139D2E00B2447E /* preinstall.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = preinstall.sh; sourceTree = "<group>"; };
|
||||
FAA97C55124A271400D5BBA9 /* sighandlers.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = sighandlers.c; sourceTree = "<group>"; };
|
||||
FAA97C56124A271400D5BBA9 /* sighandlers.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = sighandlers.h; sourceTree = "<group>"; };
|
||||
FAA9C8162377186900A04296 /* nglog.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = nglog.sh; sourceTree = "<group>"; };
|
||||
FAACD5F314A6099C006ED74F /* class.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = class.c; sourceTree = "<group>"; };
|
||||
FAACD5F414A6099C006ED74F /* class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = class.h; sourceTree = "<group>"; };
|
||||
FAC4E5CD23A7DE2400A04296 /* Makefile.am */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FAD5852F15271A7800328741 /* Capabilities.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Capabilities.txt; sourceTree = "<group>"; };
|
||||
FAD5853015271AAB00328741 /* client-cap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "client-cap.c"; sourceTree = "<group>"; };
|
||||
FAD5853115271AAB00328741 /* client-cap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "client-cap.h"; sourceTree = "<group>"; };
|
||||
FAD5853315271AB800328741 /* irc-cap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "irc-cap.c"; sourceTree = "<group>"; };
|
||||
FAD5853415271AB800328741 /* irc-cap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "irc-cap.h"; sourceTree = "<group>"; };
|
||||
FAD5853615272C2500328741 /* login.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = login.c; sourceTree = "<group>"; };
|
||||
FAD5853715272C2500328741 /* login.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = login.h; sourceTree = "<group>"; };
|
||||
FAE22BD215270EA300F1A5AB /* Bopm.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Bopm.txt; sourceTree = "<group>"; };
|
||||
FAE22BD415270EA300F1A5AB /* Contributing.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Contributing.txt; sourceTree = "<group>"; };
|
||||
FAE22BD515270EB500F1A5AB /* HowToRelease.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = HowToRelease.txt; sourceTree = "<group>"; };
|
||||
FAE22BD615270EB500F1A5AB /* Modes.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Modes.txt; sourceTree = "<group>"; };
|
||||
FAE22BD715270EB500F1A5AB /* PAM.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = PAM.txt; sourceTree = "<group>"; };
|
||||
FAE22BD815270EC400F1A5AB /* README-Interix.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "README-Interix.txt"; sourceTree = "<group>"; };
|
||||
FAE5CC2C0CF2308A007D69B6 /* numeric.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = numeric.h; sourceTree = "<group>"; };
|
||||
FAE5CC2D0CF2308A007D69B6 /* numeric.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = numeric.c; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
@@ -242,6 +261,7 @@
|
||||
files = (
|
||||
FA322DC10CEF77CB001761B3 /* libz.dylib in Frameworks */,
|
||||
FA2D567B11EA1AB300D37A35 /* libpam.dylib in Frameworks */,
|
||||
FA6BBC661605F6D60004247A /* libiconv.dylib in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -251,32 +271,37 @@
|
||||
08FB7794FE84155DC02AAC07 /* ngIRCd */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322D970CEF752C001761B3 /* doc */,
|
||||
FA322D630CEF750F001761B3 /* Makefile.am */,
|
||||
FA322D660CEF7523001761B3 /* contrib */,
|
||||
FA322D970CEF752C001761B3 /* doc */,
|
||||
FA322DAB0CEF7538001761B3 /* man */,
|
||||
FA322CD40CEF74B0001761B3 /* src */,
|
||||
FA322D5A0CEF750F001761B3 /* AUTHORS */,
|
||||
FA322D610CEF750F001761B3 /* COPYING */,
|
||||
FA322D620CEF750F001761B3 /* INSTALL */,
|
||||
FA322D640CEF750F001761B3 /* NEWS */,
|
||||
FA322D650CEF750F001761B3 /* README */,
|
||||
FA322D5B0CEF750F001761B3 /* autogen.sh */,
|
||||
FA322D5C0CEF750F001761B3 /* ChangeLog */,
|
||||
FA322D610CEF750F001761B3 /* COPYING */,
|
||||
FA322D620CEF750F001761B3 /* INSTALL.md */,
|
||||
FA322D640CEF750F001761B3 /* NEWS */,
|
||||
FA322D650CEF750F001761B3 /* README.md */,
|
||||
FA322D5B0CEF750F001761B3 /* autogen.sh */,
|
||||
FA322D5E0CEF750F001761B3 /* config.guess */,
|
||||
FA322D5F0CEF750F001761B3 /* config.sub */,
|
||||
FA322D600CEF750F001761B3 /* configure.in */,
|
||||
FA322D630CEF750F001761B3 /* Makefile.am */,
|
||||
FA18A63E16CEDDCE00132F66 /* configure.ng */,
|
||||
1AB674ADFE9D54B511CA2CBB /* Products */,
|
||||
FA322DC00CEF77CB001761B3 /* libz.dylib */,
|
||||
FA6BBC651605F6D60004247A /* libiconv.dylib */,
|
||||
FA2D567A11EA1AB300D37A35 /* libpam.dylib */,
|
||||
FA322DC00CEF77CB001761B3 /* libz.dylib */,
|
||||
);
|
||||
indentWidth = 8;
|
||||
name = ngIRCd;
|
||||
sourceTree = "<group>";
|
||||
tabWidth = 8;
|
||||
usesTabs = 1;
|
||||
wrapsLines = 0;
|
||||
};
|
||||
1AB674ADFE9D54B511CA2CBB /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322BBA0CEF72E4001761B3 /* ngIRCd */,
|
||||
FA322BBA0CEF72E4001761B3 /* ngircd */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@@ -284,12 +309,12 @@
|
||||
FA322CD40CEF74B0001761B3 /* src */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322CD70CEF74B1001761B3 /* ngircd */,
|
||||
FA322CD60CEF74B1001761B3 /* Makefile.am */,
|
||||
FA407F270DB1598D00271AF1 /* ipaddr */,
|
||||
FA322CD70CEF74B1001761B3 /* ngircd */,
|
||||
FA322D0E0CEF74B1001761B3 /* portab */,
|
||||
FA322D1B0CEF74B1001761B3 /* testsuite */,
|
||||
FA322D2E0CEF74B1001761B3 /* tool */,
|
||||
FA322CD60CEF74B1001761B3 /* Makefile.am */,
|
||||
);
|
||||
name = src;
|
||||
path = ../../src;
|
||||
@@ -298,8 +323,7 @@
|
||||
FA322CD70CEF74B1001761B3 /* ngircd */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FAA3D2790F139CDC00B2447E /* conn-ssl.c */,
|
||||
FAA3D27A0F139CDC00B2447E /* conn-ssl.h */,
|
||||
FA18A64616CEE0DD00132F66 /* Makefile.ng */,
|
||||
FA322CD90CEF74B1001761B3 /* array.c */,
|
||||
FA322CDA0CEF74B1001761B3 /* array.h */,
|
||||
FA322CDB0CEF74B1001761B3 /* channel.c */,
|
||||
@@ -308,26 +332,41 @@
|
||||
FAACD5F414A6099C006ED74F /* class.h */,
|
||||
FA322CDD0CEF74B1001761B3 /* client.c */,
|
||||
FA322CDE0CEF74B1001761B3 /* client.h */,
|
||||
FAD5853015271AAB00328741 /* client-cap.c */,
|
||||
FAD5853115271AAB00328741 /* client-cap.h */,
|
||||
FA322CDF0CEF74B1001761B3 /* conf.c */,
|
||||
FA322CE00CEF74B1001761B3 /* conf.h */,
|
||||
FAA3D2780F139CDC00B2447E /* conf-ssl.h */,
|
||||
FA322CE10CEF74B1001761B3 /* conn-func.c */,
|
||||
FA322CE20CEF74B1001761B3 /* conn-func.h */,
|
||||
FA322CE30CEF74B1001761B3 /* conn-zip.c */,
|
||||
FA322CE40CEF74B1001761B3 /* conn-zip.h */,
|
||||
FA322CE50CEF74B1001761B3 /* conn.c */,
|
||||
FA322CE60CEF74B1001761B3 /* conn.h */,
|
||||
FA6BBC5F1605F0AB0004247A /* conn-encoding.c */,
|
||||
FA6BBC601605F0AC0004247A /* conn-encoding.h */,
|
||||
FA322CE10CEF74B1001761B3 /* conn-func.c */,
|
||||
FA322CE20CEF74B1001761B3 /* conn-func.h */,
|
||||
FAA3D2790F139CDC00B2447E /* conn-ssl.c */,
|
||||
FAA3D27A0F139CDC00B2447E /* conn-ssl.h */,
|
||||
FA322CE30CEF74B1001761B3 /* conn-zip.c */,
|
||||
FA322CE40CEF74B1001761B3 /* conn-zip.h */,
|
||||
FA322CE70CEF74B1001761B3 /* defines.h */,
|
||||
FA322CE80CEF74B1001761B3 /* hash.c */,
|
||||
FA322CE90CEF74B1001761B3 /* hash.h */,
|
||||
FA322CEA0CEF74B1001761B3 /* io.c */,
|
||||
FA322CEB0CEF74B1001761B3 /* io.h */,
|
||||
FA322CFC0CEF74B1001761B3 /* irc.c */,
|
||||
FA322CFD0CEF74B1001761B3 /* irc.h */,
|
||||
FAD5853315271AB800328741 /* irc-cap.c */,
|
||||
FAD5853415271AB800328741 /* irc-cap.h */,
|
||||
FA322CEC0CEF74B1001761B3 /* irc-channel.c */,
|
||||
FA322CED0CEF74B1001761B3 /* irc-channel.h */,
|
||||
FA6BBC611605F0AC0004247A /* irc-encoding.c */,
|
||||
FA6BBC621605F0AC0004247A /* irc-encoding.h */,
|
||||
FA322CEE0CEF74B1001761B3 /* irc-info.c */,
|
||||
FA322CEF0CEF74B1001761B3 /* irc-info.h */,
|
||||
FA322CF00CEF74B1001761B3 /* irc-login.c */,
|
||||
FA322CF10CEF74B1001761B3 /* irc-login.h */,
|
||||
FA1DBB6716C707D200D4F838 /* irc-macros.h */,
|
||||
FA4F1659164836B100DBD011 /* irc-metadata.c */,
|
||||
FA4F165C164836BF00DBD011 /* irc-metadata.h */,
|
||||
FA322CF20CEF74B1001761B3 /* irc-mode.c */,
|
||||
FA322CF30CEF74B1001761B3 /* irc-mode.h */,
|
||||
FA322CF40CEF74B1001761B3 /* irc-op.c */,
|
||||
@@ -338,13 +377,12 @@
|
||||
FA322CF90CEF74B1001761B3 /* irc-server.h */,
|
||||
FA322CFA0CEF74B1001761B3 /* irc-write.c */,
|
||||
FA322CFB0CEF74B1001761B3 /* irc-write.h */,
|
||||
FA322CFC0CEF74B1001761B3 /* irc.c */,
|
||||
FA322CFD0CEF74B1001761B3 /* irc.h */,
|
||||
FA322CFE0CEF74B1001761B3 /* lists.c */,
|
||||
FA322CFF0CEF74B1001761B3 /* lists.h */,
|
||||
FA322D000CEF74B1001761B3 /* log.c */,
|
||||
FA322D010CEF74B1001761B3 /* log.h */,
|
||||
FA322D020CEF74B1001761B3 /* Makefile.am */,
|
||||
FAD5853615272C2500328741 /* login.c */,
|
||||
FAD5853715272C2500328741 /* login.h */,
|
||||
FA322D030CEF74B1001761B3 /* match.c */,
|
||||
FA322D040CEF74B1001761B3 /* match.h */,
|
||||
FA322D050CEF74B1001761B3 /* messages.h */,
|
||||
@@ -371,19 +409,17 @@
|
||||
FA322D0E0CEF74B1001761B3 /* portab */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FAA3D27C0F139CF800B2447E /* strtok_r.c */,
|
||||
FAA3D27D0F139CF800B2447E /* waitpid.c */,
|
||||
FA18A64716CEE14900132F66 /* Makefile.ng */,
|
||||
FA322D100CEF74B1001761B3 /* ansi2knr.1 */,
|
||||
FA322D110CEF74B1001761B3 /* ansi2knr.c */,
|
||||
FA322D120CEF74B1001761B3 /* exp.h */,
|
||||
FA322D130CEF74B1001761B3 /* imp.h */,
|
||||
FA322D140CEF74B1001761B3 /* Makefile.am */,
|
||||
FA322D150CEF74B1001761B3 /* portab.h */,
|
||||
FA322D160CEF74B1001761B3 /* portabtest.c */,
|
||||
FA322D170CEF74B1001761B3 /* splint.h */,
|
||||
FA322D180CEF74B1001761B3 /* strdup.c */,
|
||||
FA322D190CEF74B1001761B3 /* strlcpy.c */,
|
||||
FAA3D27C0F139CF800B2447E /* strtok_r.c */,
|
||||
FA322D1A0CEF74B1001761B3 /* vsnprintf.c */,
|
||||
FAA3D27D0F139CF800B2447E /* waitpid.c */,
|
||||
);
|
||||
path = portab;
|
||||
sourceTree = "<group>";
|
||||
@@ -391,32 +427,35 @@
|
||||
FA322D1B0CEF74B1001761B3 /* testsuite */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FAA3D2700F139CB300B2447E /* invite-test.e */,
|
||||
FAA3D2710F139CB300B2447E /* join-test.e */,
|
||||
FAA3D2720F139CB300B2447E /* kick-test.e */,
|
||||
FAA3D2730F139CB300B2447E /* message-test.e */,
|
||||
FAA3D2740F139CB300B2447E /* ngircd-test1.conf */,
|
||||
FAA3D2750F139CB300B2447E /* ngircd-test2.conf */,
|
||||
FAA3D2760F139CB300B2447E /* opless-channel-test.e */,
|
||||
FAA3D2770F139CB300B2447E /* server-link-test.e */,
|
||||
FA18A64A16CEE18100132F66 /* Makefile.ng */,
|
||||
FA322D1D0CEF74B1001761B3 /* channel-test.e */,
|
||||
FA322D1E0CEF74B1001761B3 /* check-idle.e */,
|
||||
FA322D1F0CEF74B1001761B3 /* connect-test.e */,
|
||||
FA322D200CEF74B1001761B3 /* functions.inc */,
|
||||
FA322D210CEF74B1001761B3 /* getpid.sh */,
|
||||
FA322D220CEF74B1001761B3 /* Makefile.am */,
|
||||
FA1A6BBC0D6857BB00AA8F71 /* misc-test.e */,
|
||||
FA322D230CEF74B1001761B3 /* mode-test.e */,
|
||||
FAA3D2700F139CB300B2447E /* invite-test.e */,
|
||||
FAA3D2710F139CB300B2447E /* join-test.e */,
|
||||
FAA3D2720F139CB300B2447E /* kick-test.e */,
|
||||
FAA3D2730F139CB300B2447E /* message-test.e */,
|
||||
FA18A64E16CEE24B00132F66 /* misc-test.e */,
|
||||
FA18A64C16CEE1AC00132F66 /* mode-test.e */,
|
||||
FAA3D2740F139CB300B2447E /* ngircd-test1.conf */,
|
||||
FAA3D2750F139CB300B2447E /* ngircd-test2.conf */,
|
||||
FAA3D2760F139CB300B2447E /* opless-channel-test.e */,
|
||||
FA322D250CEF74B1001761B3 /* README */,
|
||||
FAA3D2770F139CB300B2447E /* server-link-test.e */,
|
||||
FA322D260CEF74B1001761B3 /* start-server.sh */,
|
||||
FA322D270CEF74B1001761B3 /* stop-server.sh */,
|
||||
FA322D280CEF74B1001761B3 /* stress-A.e */,
|
||||
FA322D290CEF74B1001761B3 /* stress-B.e */,
|
||||
FA7E9FEE242FFC4500A04296 /* server-link-test.e */,
|
||||
FA7E9FF0242FFC6C00A04296 /* server-login-test.e */,
|
||||
FA322D2A0CEF74B1001761B3 /* stress-server.sh */,
|
||||
FA322D2B0CEF74B1001761B3 /* test-loop.sh */,
|
||||
FA322D2C0CEF74B1001761B3 /* tests.sh */,
|
||||
FA322D2D0CEF74B1001761B3 /* wait-tests.sh */,
|
||||
FA1A6BBD0D6857D900AA8F71 /* who-test.e */,
|
||||
FA18A64D16CEE1D900132F66 /* whois-test.e */,
|
||||
);
|
||||
path = testsuite;
|
||||
sourceTree = "<group>";
|
||||
@@ -424,9 +463,7 @@
|
||||
FA322D2E0CEF74B1001761B3 /* tool */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322D300CEF74B1001761B3 /* ansi2knr.1 */,
|
||||
FA322D310CEF74B1001761B3 /* ansi2knr.c */,
|
||||
FA322D320CEF74B1001761B3 /* Makefile.am */,
|
||||
FA18A64F16CEE27700132F66 /* Makefile.ng */,
|
||||
FA322D330CEF74B1001761B3 /* tool.c */,
|
||||
FA322D340CEF74B1001761B3 /* tool.h */,
|
||||
);
|
||||
@@ -436,17 +473,20 @@
|
||||
FA322D660CEF7523001761B3 /* contrib */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FAC4E5CD23A7DE2400A04296 /* Makefile.am */,
|
||||
FA322D680CEF7523001761B3 /* Debian */,
|
||||
FA322D730CEF7523001761B3 /* MacOSX */,
|
||||
FA322D910CEF7523001761B3 /* Makefile.am */,
|
||||
FA322D920CEF7523001761B3 /* ngindent */,
|
||||
FA322D950CEF7523001761B3 /* README */,
|
||||
FA322D920CEF7523001761B3 /* ngindent.sh */,
|
||||
FA4B08E513E7F8FB00765BA3 /* ngircd-bsd.sh */,
|
||||
FA4B08E613E7F91700765BA3 /* ngIRCd-Logo.gif */,
|
||||
FA4B08E713E7F91700765BA3 /* ngircd-redhat.init */,
|
||||
FA4B4F542055B47C00A04296 /* ngircd.logcheck */,
|
||||
FA18A63F16CEDE2300132F66 /* ngircd.service */,
|
||||
FA18A64016CEDE2300132F66 /* ngircd.socket */,
|
||||
FA322D940CEF7523001761B3 /* ngircd.spec */,
|
||||
FAA9C8162377186900A04296 /* nglog.sh */,
|
||||
FA4B08E813E7F91C00765BA3 /* platformtest.sh */,
|
||||
FA322D950CEF7523001761B3 /* README */,
|
||||
FA322D960CEF7523001761B3 /* systrace.policy */,
|
||||
);
|
||||
name = contrib;
|
||||
path = ..;
|
||||
@@ -455,15 +495,17 @@
|
||||
FA322D680CEF7523001761B3 /* Debian */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322D6E0CEF7523001761B3 /* Makefile.am */,
|
||||
FA322D6A0CEF7523001761B3 /* changelog */,
|
||||
FA322D6B0CEF7523001761B3 /* compat */,
|
||||
FA322D6C0CEF7523001761B3 /* control */,
|
||||
FA322D6D0CEF7523001761B3 /* copyright */,
|
||||
FA322D6E0CEF7523001761B3 /* Makefile.am */,
|
||||
FA322D6F0CEF7523001761B3 /* ngircd.default */,
|
||||
FA322D700CEF7523001761B3 /* ngircd.init */,
|
||||
FA18A64116CEDE3500132F66 /* ngircd.pam */,
|
||||
FA322D710CEF7523001761B3 /* ngircd.postinst */,
|
||||
FA322D720CEF7523001761B3 /* rules */,
|
||||
FA4B4F552055B4C800A04296 /* source */,
|
||||
);
|
||||
path = Debian;
|
||||
sourceTree = "<group>";
|
||||
@@ -471,88 +513,17 @@
|
||||
FA322D730CEF7523001761B3 /* MacOSX */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA18A64316CEDE8100132F66 /* Makefile.am */,
|
||||
FAA3D2810F139D2E00B2447E /* ngIRCd.pmdoc */,
|
||||
FA322DB10CEF7565001761B3 /* config.h */,
|
||||
FA18A64216CEDE5700132F66 /* de.barton.ngircd.plist.tmpl */,
|
||||
FA322D8E0CEF7523001761B3 /* ngIRCd.xcodeproj */,
|
||||
FAA3D28A0F139D2E00B2447E /* postinstall.sh */,
|
||||
FAA3D28B0F139D2E00B2447E /* preinstall.sh */,
|
||||
FA322D750CEF7523001761B3 /* build */,
|
||||
FA322D8D0CEF7523001761B3 /* Makefile.am */,
|
||||
FA322D8E0CEF7523001761B3 /* ngIRCd.xcodeproj */,
|
||||
FA322DB10CEF7565001761B3 /* config.h */,
|
||||
);
|
||||
path = MacOSX;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FA322D750CEF7523001761B3 /* build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322D760CEF7523001761B3 /* ngIRCd.build */,
|
||||
);
|
||||
path = build;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FA322D760CEF7523001761B3 /* ngIRCd.build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322D770CEF7523001761B3 /* Default */,
|
||||
FA322D7F0CEF7523001761B3 /* ngIRCd.pbxindex */,
|
||||
);
|
||||
path = ngIRCd.build;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FA322D770CEF7523001761B3 /* Default */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322D780CEF7523001761B3 /* ngIRCd.build */,
|
||||
);
|
||||
path = Default;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FA322D780CEF7523001761B3 /* ngIRCd.build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322D7A0CEF7523001761B3 /* Objects-normal */,
|
||||
);
|
||||
path = ngIRCd.build;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FA322D7A0CEF7523001761B3 /* Objects-normal */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322D7B0CEF7523001761B3 /* i386 */,
|
||||
FA322D7D0CEF7523001761B3 /* ppc */,
|
||||
);
|
||||
path = "Objects-normal";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FA322D7B0CEF7523001761B3 /* i386 */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
path = i386;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FA322D7D0CEF7523001761B3 /* ppc */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
path = ppc;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FA322D7F0CEF7523001761B3 /* ngIRCd.pbxindex */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322D880CEF7523001761B3 /* strings.pbxstrings */,
|
||||
);
|
||||
path = ngIRCd.pbxindex;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FA322D880CEF7523001761B3 /* strings.pbxstrings */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
path = strings.pbxstrings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FA322D8F0CEF7523001761B3 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -563,18 +534,25 @@
|
||||
FA322D970CEF752C001761B3 /* doc */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FAA3D2800F139D1500B2447E /* Services.txt */,
|
||||
FA407F380DB15AC700271AF1 /* GIT.txt */,
|
||||
FA322D9A0CEF752C001761B3 /* FAQ.txt */,
|
||||
FA322D9B0CEF752C001761B3 /* Makefile.am */,
|
||||
FA322DA20CEF752C001761B3 /* src */,
|
||||
FAE22BD215270EA300F1A5AB /* Bopm.txt */,
|
||||
FAD5852F15271A7800328741 /* Capabilities.txt */,
|
||||
FA18A64416CEDFCE00132F66 /* Commands.txt */,
|
||||
FAE22BD415270EA300F1A5AB /* Contributing.txt */,
|
||||
FA322D9A0CEF752C001761B3 /* FAQ.txt */,
|
||||
FAE22BD515270EB500F1A5AB /* HowToRelease.txt */,
|
||||
FAE22BD615270EB500F1A5AB /* Modes.txt */,
|
||||
FAE22BD715270EB500F1A5AB /* PAM.txt */,
|
||||
FA322D9C0CEF752C001761B3 /* Platforms.txt */,
|
||||
FA322D9D0CEF752C001761B3 /* Protocol.txt */,
|
||||
FA322D9E0CEF752C001761B3 /* README-AUX.txt */,
|
||||
FA322D9F0CEF752C001761B3 /* README-BeOS.txt */,
|
||||
FAE22BD815270EC400F1A5AB /* README-Interix.txt */,
|
||||
FA322DA00CEF752C001761B3 /* RFC.txt */,
|
||||
FA77849A133FB9FF00740057 /* sample-ngircd.conf.tmpl */,
|
||||
FA322DA20CEF752C001761B3 /* src */,
|
||||
FAA3D2800F139D1500B2447E /* Services.txt */,
|
||||
FA322DA90CEF752C001761B3 /* SSL.txt */,
|
||||
FA77849A133FB9FF00740057 /* sample-ngircd.conf.tmpl */,
|
||||
);
|
||||
name = doc;
|
||||
path = ../../doc;
|
||||
@@ -583,11 +561,9 @@
|
||||
FA322DA20CEF752C001761B3 /* src */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322DA70CEF752C001761B3 /* Makefile.am */,
|
||||
FA322DA40CEF752C001761B3 /* Doxyfile */,
|
||||
FA322DA50CEF752C001761B3 /* footer.inc.html */,
|
||||
FA322DA60CEF752C001761B3 /* header.inc.html */,
|
||||
FA322DA70CEF752C001761B3 /* Makefile.am */,
|
||||
FA322DA80CEF752C001761B3 /* ngircd-doc.css */,
|
||||
);
|
||||
path = src;
|
||||
sourceTree = "<group>";
|
||||
@@ -606,7 +582,7 @@
|
||||
FA407F270DB1598D00271AF1 /* ipaddr */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA407F2B0DB159F400271AF1 /* Makefile.am */,
|
||||
FA18A64516CEE0C700132F66 /* Makefile.ng */,
|
||||
FA407F2C0DB159F400271AF1 /* ng_ipaddr.c */,
|
||||
FA407F2D0DB159F400271AF1 /* ng_ipaddr.h */,
|
||||
);
|
||||
@@ -616,12 +592,12 @@
|
||||
FAA3D2810F139D2E00B2447E /* ngIRCd.pmdoc */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FAA3D2820F139D2E00B2447E /* 01ngircd-contents.xml */,
|
||||
FAA3D2830F139D2E00B2447E /* 01ngircd.xml */,
|
||||
FAA3D2840F139D2E00B2447E /* 02de-contents.xml */,
|
||||
FAA3D2850F139D2E00B2447E /* 02de.xml */,
|
||||
FAA3D2860F139D2E00B2447E /* index.xml */,
|
||||
FAA3D2880F139D2E00B2447E /* Makefile.am */,
|
||||
FAA3D2860F139D2E00B2447E /* index.xml */,
|
||||
FAA3D2830F139D2E00B2447E /* 01ngircd.xml */,
|
||||
FAA3D2820F139D2E00B2447E /* 01ngircd-contents.xml */,
|
||||
FAA3D2850F139D2E00B2447E /* 02de.xml */,
|
||||
FAA3D2840F139D2E00B2447E /* 02de-contents.xml */,
|
||||
);
|
||||
path = ngIRCd.pmdoc;
|
||||
sourceTree = "<group>";
|
||||
@@ -635,7 +611,6 @@
|
||||
buildPhases = (
|
||||
8DD76FAB0486AB0100D96B5E /* Sources */,
|
||||
8DD76FAD0486AB0100D96B5E /* Frameworks */,
|
||||
8DD76FAF0486AB0100D96B5E /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
@@ -644,7 +619,7 @@
|
||||
name = ngIRCd;
|
||||
productInstallPath = "$(HOME)/bin";
|
||||
productName = ngIRCd;
|
||||
productReference = FA322BBA0CEF72E4001761B3 /* ngIRCd */;
|
||||
productReference = FA322BBA0CEF72E4001761B3 /* ngircd */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
@@ -653,17 +628,16 @@
|
||||
08FB7793FE84155DC02AAC07 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0420;
|
||||
LastUpgradeCheck = 1140;
|
||||
ORGANIZATIONNAME = "ngIRCd Development Team";
|
||||
};
|
||||
buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "ngIRCd" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 1;
|
||||
knownRegions = (
|
||||
English,
|
||||
Japanese,
|
||||
French,
|
||||
German,
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 08FB7794FE84155DC02AAC07 /* ngIRCd */;
|
||||
projectDirPath = "";
|
||||
@@ -718,6 +692,12 @@
|
||||
FA2D564A11EA158B00D37A35 /* pam.c in Sources */,
|
||||
FAA97C57124A271400D5BBA9 /* sighandlers.c in Sources */,
|
||||
FAACD5F514A6099C006ED74F /* class.c in Sources */,
|
||||
FAD5853215271AAB00328741 /* client-cap.c in Sources */,
|
||||
FAD5853515271AB800328741 /* irc-cap.c in Sources */,
|
||||
FAD5853815272C2600328741 /* login.c in Sources */,
|
||||
FA6BBC631605F0AC0004247A /* conn-encoding.c in Sources */,
|
||||
FA6BBC641605F0AC0004247A /* irc-encoding.c in Sources */,
|
||||
FA4F165A164836B100DBD011 /* irc-metadata.c in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -727,79 +707,102 @@
|
||||
1DEB928708733DD80010E9CD /* Default */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
|
||||
GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_MISSING_PARENTHESES = YES;
|
||||
GCC_WARN_PEDANTIC = YES;
|
||||
GCC_WARN_SHADOW = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNKNOWN_PRAGMAS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_LABEL = YES;
|
||||
GCC_WARN_UNUSED_PARAMETER = YES;
|
||||
GCC_WARN_UNUSED_VALUE = YES;
|
||||
INSTALL_PATH = /usr/local/bin;
|
||||
PRODUCT_NAME = ngIRCd;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
};
|
||||
name = Default;
|
||||
};
|
||||
1DEB928B08733DD80010E9CD /* Default */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
|
||||
GCC_VERSION = 4.2;
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_WARN_ASSIGN_ENUM = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_PEDANTIC = YES;
|
||||
GCC_WARN_SHADOW = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_LABEL = YES;
|
||||
GCC_WARN_UNUSED_PARAMETER = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
SDKROOT = macosx10.6;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||
PRODUCT_NAME = ngircd;
|
||||
};
|
||||
name = Default;
|
||||
};
|
||||
FAB0570C105D917F006AF9E2 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = "$(NATIVE_ARCH_ACTUAL)";
|
||||
GCC_DEBUGGING_SYMBOLS = full;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_VERSION = 4.2;
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_WARN_ASSIGN_ENUM = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_PEDANTIC = YES;
|
||||
GCC_WARN_SHADOW = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_LABEL = YES;
|
||||
GCC_WARN_UNUSED_PARAMETER = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
PRODUCT_NAME = ngircd;
|
||||
SDKROOT = "";
|
||||
STRIP_INSTALLED_PRODUCT = NO;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
FAB0570D105D917F006AF9E2 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
|
||||
GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_MISSING_PARENTHESES = YES;
|
||||
GCC_WARN_PEDANTIC = YES;
|
||||
GCC_WARN_SHADOW = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = NO;
|
||||
GCC_WARN_UNKNOWN_PRAGMAS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_LABEL = YES;
|
||||
GCC_WARN_UNUSED_PARAMETER = YES;
|
||||
GCC_WARN_UNUSED_VALUE = YES;
|
||||
INSTALL_PATH = /usr/local/bin;
|
||||
PRODUCT_NAME = ngIRCd;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2020 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# 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
|
||||
@@ -9,10 +9,20 @@
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
#
|
||||
|
||||
SUBDIRS = Anope Debian MacOSX
|
||||
SUBDIRS = Debian MacOSX
|
||||
|
||||
EXTRA_DIST = README ngircd.spec systrace.policy ngindent ngircd-bsd.sh \
|
||||
ngIRCd-Logo.gif ngircd-redhat.init platformtest.sh
|
||||
EXTRA_DIST = README \
|
||||
de.barton.ngircd.metainfo.xml \
|
||||
ngindent.sh \
|
||||
ngircd-bsd.sh \
|
||||
ngIRCd-Logo.gif \
|
||||
ngircd-redhat.init \
|
||||
ngircd.logcheck \
|
||||
ngircd.service \
|
||||
ngircd.socket \
|
||||
ngircd.spec \
|
||||
nglog.sh \
|
||||
platformtest.sh
|
||||
|
||||
maintainer-clean-local:
|
||||
rm -f Makefile Makefile.in
|
||||
|
@@ -2,23 +2,26 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2011 Alexander Barton and Contributors.
|
||||
(c)2001-2020 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- Contributions --
|
||||
-- Contributions --
|
||||
|
||||
|
||||
Anope/
|
||||
- A preliminary patch that adds a ngIRCd protocol module to Anope 1.9.
|
||||
|
||||
Debian/
|
||||
- Various files for building Debian GNU/Linux packages (".deb's").
|
||||
- ngircd.init; ngircd.default: init script for Debian-based systems.
|
||||
- ngircd.pam: example PAM configuration.
|
||||
|
||||
MacOSX/
|
||||
- Project files for XCode, the "project builder" of Apple Mac OS X.
|
||||
- de.barton.ngircd.plist[.tmpl]: launchd(8) property list.
|
||||
|
||||
ngindent
|
||||
de.barton.ngircd.metainfo.xml
|
||||
- AppStream metadata file.
|
||||
|
||||
ngindent.sh
|
||||
- Script to indent the code of ngIRCd in the "standard way".
|
||||
|
||||
ngircd-bsd.sh
|
||||
@@ -27,11 +30,20 @@ ngircd-bsd.sh
|
||||
ngircd-redhat.init
|
||||
- Start/stop script for RedHat-based distributions (like CentOS).
|
||||
|
||||
ngircd.logcheck
|
||||
- Sample rules for logcheck(8) to ignore "normal" log messages of ngIRCd.
|
||||
|
||||
ngircd.service
|
||||
- systemd(8) service unit configuration file.
|
||||
|
||||
ngircd.socket
|
||||
- systemd(8) socket unit configuration file for "socket activation".
|
||||
|
||||
ngircd.spec
|
||||
- RPM "spec" file.
|
||||
|
||||
nglog.sh
|
||||
- Colorizes the log messages of ngircd(8) accoring to their log level.
|
||||
|
||||
platformtest.sh
|
||||
- Build ngIRCd and output a "result line" suitable for doc/Platforms.txt.
|
||||
|
||||
systrace.policy
|
||||
- Systrace policy file for OpenBSD (and probably NetBSD).
|
||||
|
126
contrib/de.barton.ngircd.metainfo.xml
Normal file
126
contrib/de.barton.ngircd.metainfo.xml
Normal file
@@ -0,0 +1,126 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="service">
|
||||
<id>de.barton.ngircd</id>
|
||||
<name>ngIRCd</name>
|
||||
<summary>Lightweight Internet Relay Chat server</summary>
|
||||
<metadata_license>MIT</metadata_license>
|
||||
<project_license>GPL-2.0-or-later</project_license>
|
||||
<developer_name>Alexander Barton and Contributors</developer_name>
|
||||
<update_contact>alex@barton.de</update_contact>
|
||||
<description>
|
||||
<p>ngIRCd is a free, portable and lightweight Internet Relay Chat server for small or private networks, developed under the GNU General Public License (GPL).</p>
|
||||
<p>The server is quite easy to configure, can handle dynamic IP addresses, and optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for user authentication as well as character set conversion for legacy clients. The server has been written from scratch and is not based on the "forefather", the daemon of the IRCNet.</p>
|
||||
<p>The name ngIRCd means next-generation IRC daemon, which is a little bit exaggerated: lightweight Internet Relay Chat server most probably would have been a better name :-)</p>
|
||||
</description>
|
||||
<icon type="remote" width="300" height="300">https://ngircd.barton.de/common/ngircd-300x300.png</icon>
|
||||
<categories>
|
||||
<category>Network</category>
|
||||
</categories>
|
||||
<url type="homepage">https://ngircd.barton.de</url>
|
||||
<url type="bugtracker">https://ngircd.barton.de/bugtracker</url>
|
||||
<url type="help">https://ngircd.barton.de/support</url>
|
||||
<provides>
|
||||
<binary>ngircd</binary>
|
||||
</provides>
|
||||
<launchable type="service">ngircd</launchable>
|
||||
<releases>
|
||||
<release version="26" date="2020-06-20" />
|
||||
<release version="26~rc2" date="2020-06-11" type="development" />
|
||||
<release version="26~rc1" date="2020-05-10" type="development" />
|
||||
<release version="25" date="2019-01-23" />
|
||||
<release version="25~rc1" date="2018-08-11" type="development" />
|
||||
<release version="24" date="2017-01-20" />
|
||||
<release version="24~rc1" date="2017-01-07" type="development" />
|
||||
<release version="23" date="2015-11-16" />
|
||||
<release version="23~rc1" date="2015-09-06" type="development" />
|
||||
<release version="22.1" date="2015-04-06" />
|
||||
<release version="22" date="2014-10-11" />
|
||||
<release version="22~rc1" date="2014-09-29" type="development" />
|
||||
<release version="21.1" date="2014-03-25" />
|
||||
<release version="21" date="2013-10-30" />
|
||||
<release version="21~rc2" date="2013-10-20" type="development" />
|
||||
<release version="21~rc1" date="2013-10-05" type="development" />
|
||||
<release version="20.3" date="2013-08-23" />
|
||||
<release version="20.2" date="2013-02-15" />
|
||||
<release version="20.1" date="2013-01-02" />
|
||||
<release version="20" date="2012-12-17" />
|
||||
<release version="20~rc2" date="2012-12-02" type="development" />
|
||||
<release version="20~rc1" date="2012-11-11" type="development" />
|
||||
<release version="19.2" date="2012-06-19" />
|
||||
<release version="19.2~rc1" date="2012-06-13" type="development" />
|
||||
<release version="19.1" date="2012-03-19" />
|
||||
<release version="19" date="2012-02-29" />
|
||||
<release version="19~rc1" date="2012-02-12" type="development" />
|
||||
<release version="18" date="2011-07-10" />
|
||||
<release version="18~rc2" date="2011-06-29" type="development" />
|
||||
<release version="18~rc1" date="2011-06-27" type="development" />
|
||||
<release version="17.1" date="2010-12-19" />
|
||||
<release version="17" date="2010-11-07" />
|
||||
<release version="17~rc3" date="2010-10-27" type="development" />
|
||||
<release version="17~rc2" date="2010-10-25" type="development" />
|
||||
<release version="17~rc1" date="2010-10-11" type="development" />
|
||||
<release version="16" date="2010-05-02" />
|
||||
<release version="16~rc2" date="2010-04-25" type="development" />
|
||||
<release version="16~rc1" date="2010-03-25" type="development" />
|
||||
<release version="15" date="2009-11-07" />
|
||||
<release version="15~rc1" date="2009-10-15" type="development" />
|
||||
<release version="14.1" date="2009-05-05" />
|
||||
<release version="14" date="2009-04-20" />
|
||||
<release version="14~rc1" date="2009-03-29" type="development" />
|
||||
<release version="13" date="2008-12-25" />
|
||||
<release version="0.12.1" date="2008-07-09" />
|
||||
<release version="0.12.0" date="2008-05-13" />
|
||||
<release version="0.12.0-pre2" date="2008-04-29" type="development" />
|
||||
<release version="0.12.0-pre1" date="2008-04-20" type="development" />
|
||||
<release version="0.11.1" date="2008-02-26" />
|
||||
<release version="0.11.0" date="2008-01-15" />
|
||||
<release version="0.11.0-pre2" date="2008-01-07" type="development" />
|
||||
<release version="0.11.0-pre1" date="2008-01-02" type="development" />
|
||||
<release version="0.10.4" date="2008-01-07" />
|
||||
<release version="0.10.3" date="2007-08-01" />
|
||||
<release version="0.10.2" date="2007-06-08" />
|
||||
<release version="0.10.2-pre2" date="2007-05-19" type="development" />
|
||||
<release version="0.10.2-pre1" date="2007-05-05" type="development" />
|
||||
<release version="0.10.1" date="2006-12-17" />
|
||||
<release version="0.10.0" date="2006-10-01" />
|
||||
<release version="0.10.0-pre2" date="2006-09-09" type="development" />
|
||||
<release version="0.10.0-pre1" date="2006-08-02" type="development" />
|
||||
<release version="0.9.2" date="2005-10-15" />
|
||||
<release version="0.9.1" date="2005-08-03" />
|
||||
<release version="0.9.0" date="2005-07-24" />
|
||||
<release version="0.9.0-pre1" date="2005-07-09" type="development" />
|
||||
<release version="0.8.3" date="2005-02-03" />
|
||||
<release version="0.8.2" date="2005-01-26" />
|
||||
<release version="0.8.1" date="2004-12-25" />
|
||||
<release version="0.8.0" date="2004-06-26" />
|
||||
<release version="0.8.0-pre1" date="2004-05-07" type="development" />
|
||||
<release version="0.7.7" date="2004-02-05" />
|
||||
<release version="0.7.6" date="2003-12-05" />
|
||||
<release version="0.7.5" date="2003-11-07" />
|
||||
<release version="0.7.1" date="2003-07-18" />
|
||||
<release version="0.7.0" date="2003-05-01" />
|
||||
<release version="0.7.0-pre2" date="2003-04-27" type="development" />
|
||||
<release version="0.7.0-pre1" date="2003-04-22" type="development" />
|
||||
<release version="0.6.0" date="2002-12-24" />
|
||||
<release version="0.6.0-pre2" date="2002-12-23" type="development" />
|
||||
<release version="0.6.0-pre1" date="2002-12-18" type="development" />
|
||||
<release version="0.5.4" date="2002-11-24" />
|
||||
<release version="0.5.3" date="2002-11-08" />
|
||||
<release version="0.5.2" date="2002-10-04" />
|
||||
<release version="0.5.1" date="2002-10-03" />
|
||||
<release version="0.5.0" date="2002-09-20" />
|
||||
<release version="0.5.0-pre2" date="2002-09-17" type="development" />
|
||||
<release version="0.5.0-pre1" date="2002-09-16" type="development" />
|
||||
<release version="0.4.3" date="2002-06-11" />
|
||||
<release version="0.4.2" date="2002-04-29" />
|
||||
<release version="0.4.1" date="2002-04-08" />
|
||||
<release version="0.4.0" date="2002-04-01" />
|
||||
<release version="0.3.0" date="2002-03-02" />
|
||||
<release version="0.2.1" date="2002-02-17" />
|
||||
<release version="0.2.0" date="2002-02-15" />
|
||||
<release version="0.1.0" date="2002-01-29" />
|
||||
<release version="0.0.3" date="2002-01-16" />
|
||||
<release version="0.0.2" date="2002-01-06" />
|
||||
<release version="0.0.1" date="2001-12-31" />
|
||||
</releases>
|
||||
</component>
|
@@ -1,17 +0,0 @@
|
||||
#/bin/sh
|
||||
|
||||
INDENTARGS="-kr -i8 -ts8 -l80 -c3 -cd41 -ss -ncs -psl"
|
||||
|
||||
# check if indent(1) is available
|
||||
type indent >/dev/null 2>&1 && INDENT="indent"
|
||||
type gindent >/dev/null 2>&1 && INDENT="gindent"
|
||||
type gnuindent >/dev/null 2>&1 && INDENT="gnuindent"
|
||||
|
||||
if [ -z "$INDENT" ]; then
|
||||
echo "Error: GNU \"indent\" not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
$INDENT -v $INDENTARGS $*
|
||||
|
||||
# -eof-
|
46
contrib/ngindent.sh
Executable file
46
contrib/ngindent.sh
Executable file
@@ -0,0 +1,46 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2019 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# 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.
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
#
|
||||
# This script uses GNU indent(1) to format C source code files of ngIRCd.
|
||||
# Usage:
|
||||
# - ./contrib/ngindent.sh [<file> [<file> [...]]]
|
||||
# - cat ./src/ngircd/<c_file> | ./contrib/ngindent.sh
|
||||
|
||||
# Use a coding-style based on "Kernighan & Ritchie" (-kr):
|
||||
INDENTARGS="-kr
|
||||
-bad
|
||||
-c3
|
||||
-cd41
|
||||
-i8
|
||||
-l80
|
||||
-ncs
|
||||
-psl
|
||||
-sob
|
||||
-ss
|
||||
-ts8
|
||||
-blf
|
||||
-il0
|
||||
"
|
||||
|
||||
# check if indent(1) is available
|
||||
command -v indent >/dev/null 2>&1 && INDENT="indent"
|
||||
command -v gindent >/dev/null 2>&1 && INDENT="gindent"
|
||||
command -v gnuindent >/dev/null 2>&1 && INDENT="gnuindent"
|
||||
|
||||
if [ -z "$INDENT" ]; then
|
||||
echo "Error: GNU \"indent\" not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
$INDENT -v $INDENTARGS "$@"
|
||||
|
||||
# -eof-
|
0
contrib/ngircd-bsd.sh
Normal file → Executable file
0
contrib/ngircd-bsd.sh
Normal file → Executable file
0
contrib/ngircd-redhat.init
Normal file → Executable file
0
contrib/ngircd-redhat.init
Normal file → Executable file
61
contrib/ngircd.logcheck
Normal file
61
contrib/ngircd.logcheck
Normal file
@@ -0,0 +1,61 @@
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Accepted connection [0-9]+ from ".*:[0-9]+" on socket [0-9]+\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve address ".*": Name or service not known \[.*\]\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve ".*": host not found$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve ".*": Name or service not known$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve ".*": No address associated with hostname$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Can't connect\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Client closed connection\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Got QUIT command\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Read error\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): SSL accept error, closing socket\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client ".*" unregistered (connection [0-9]+): Timeout\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Timeout\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Write error\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+: initialized SSL3\.0 using cipher .*\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+: initialized TLS1\.[012] using cipher .*\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+: initialized TLSv1\.[012] using cipher .*\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+: initialized TLSv1 using cipher .*\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+ \(socket [0-9]+\) with ".*:[0-9]+" established\. Now logging in \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+ with ".*:[0-9]+" closed \(in: .*, out: .*\)\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Enabled link compression \(zlib\) on connection [0-9]+\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Establishing connection for ".*" to ".*:[0-9]+" \(.*\), socket [0-9]+ \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: IDENT lookup for connection [0-9]+: ".*"\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: IDENT lookup for connection [0-9]+: no result\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Now listening on .*:[0-9]+ \(socket [0-9]+\)\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: OpenSSL .* initialized\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Possible forgery: .* resolved to ".*", which has no IP address!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Preparing to establish a new server link for ".*" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Read error on connection [0-9]+ \(socket [0-9]+\): Connection reset by peer!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" registered \(via .*, connected to .*, [0-9]+ hops\)\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" unregistered: .* .*\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" unregistered: ".*" \(SQUIT from .*\)\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down all listening sockets \([0-9]+ total\) \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Can't connect\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Client closed connection\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Got QUIT command\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Ping timeout: [0-9]+ seconds\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Read error\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Server going down\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(SSL accept error, closing socket\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Timeout\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Write error\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL connection [0-9]+ shutting down \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL connection [0-9]+ with ".*:[0-9]+" established\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL connection on socket [0-9]+ failed!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: A TLS packet with unexpected length was received\. \[ConnSSL_Read\]\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: A TLS packet with unexpected length was received\. \[gnutls_handshake\]\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: Broken pipe \[in ConnSSL_Write\(\)\]!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: Connection reset by peer \[in ConnSSL_Read\(\)\]!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: Connection reset by peer \[in SSL_connect\(\)\]!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL protocol error: SSL_accept \(.*\)$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" changed nick \(connection [0-9]+\): ".*" -> ".*"\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" registered \(connection [0-9]+\)\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Client closed connection\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Got QUIT command\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Ping timeout: [0-9]+ seconds\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Read error\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Server going down\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: warning: can't get client address: Connection reset by peer$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: warning: /etc/hosts\.allow, line [0-9]+: can't verify hostname: getaddrinfo\(.*, AF_INET\) failed$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Write error on connection [0-9]+ \(socket [0-9]+\): Broken pipe!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Write error on connection [0-9]+ \(socket [0-9]+\): Connection reset by peer!$
|
43
contrib/ngircd.service
Normal file
43
contrib/ngircd.service
Normal file
@@ -0,0 +1,43 @@
|
||||
# ngIRCd systemd service unit.
|
||||
# See systemd(1), systemd.unit(5), systemd.service(5), systemd.exec(5).
|
||||
|
||||
[Unit]
|
||||
Description=Next Generation IRC Daemon
|
||||
Documentation=man:ngircd(8) man:ngircd.conf(5) https://ngircd.barton.de
|
||||
After=network.target
|
||||
Wants=anope.service atheme.service irc-services.service
|
||||
Wants=bopm.service
|
||||
Before=anope.service atheme.service irc-services.service
|
||||
Before=bopm.service
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
User=irc
|
||||
Group=irc
|
||||
# Settings & limits:
|
||||
CapabilityBoundingSet=CAP_SYS_CHROOT CAP_NET_BIND_SERVICE
|
||||
MemoryDenyWriteExecute=yes
|
||||
NoNewPrivileges=yes
|
||||
PrivateDevices=yes
|
||||
PrivateTmp=yes
|
||||
ProtectControlGroups=yes
|
||||
ProtectHome=yes
|
||||
ProtectKernelModules=yes
|
||||
ProtectKernelTunables=yes
|
||||
ProtectSystem=full
|
||||
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
|
||||
RestrictRealtime=yes
|
||||
RuntimeDirectory=ircd
|
||||
RuntimeDirectoryMode=750
|
||||
# Try to load "default files" from any Debian package variant to keep this
|
||||
# unit generic.
|
||||
EnvironmentFile=-/etc/default/ngircd
|
||||
EnvironmentFile=-/etc/default/ngircd-full
|
||||
EnvironmentFile=-/etc/default/ngircd-full-dbg
|
||||
# Start ngIRCd. Note: systemd doesn't allow to use $DAEMON here!
|
||||
ExecStart=/usr/sbin/ngircd $PARAMS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
12
contrib/ngircd.socket
Normal file
12
contrib/ngircd.socket
Normal file
@@ -0,0 +1,12 @@
|
||||
[Unit]
|
||||
Description=Next Generation IRC Daemon (Socket)
|
||||
Documentation=man:ngircd(8) man:ngircd.conf(5)
|
||||
|
||||
[Socket]
|
||||
BindIPv6Only=ipv6-only
|
||||
ListenStream=0.0.0.0:6667
|
||||
#ListenStream=[::]:6667
|
||||
IPTOS=low-delay
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
@@ -1,5 +1,5 @@
|
||||
%define name ngircd
|
||||
%define version 19~rc1
|
||||
%define version 26
|
||||
%define release 1
|
||||
%define prefix %{_prefix}
|
||||
|
||||
@@ -15,19 +15,15 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildRequires: zlib-devel, openssl-devel
|
||||
|
||||
%description
|
||||
This package provides ngIRCd, a lightweight Internet Relay Chat
|
||||
server for small or private networks. It is simple to configure, can
|
||||
cope with dynamic IP addresses, and supports IPv6 as well as SSL. It
|
||||
is written from scratch, not based on the original IRCd and quite
|
||||
portable.
|
||||
ngIRCd is a free, portable and lightweight Internet Relay Chat server for small
|
||||
or private networks, developed under the GNU General Public License (GPL).
|
||||
|
||||
The server is quite easy to configure, can handle dynamic IP addresses, and
|
||||
optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for
|
||||
user authentication as well as character set conversion for legacy clients. The
|
||||
server has been written from scratch and is not based on the forefather, the
|
||||
daemon of IRCNet.
|
||||
|
||||
Advantages:
|
||||
- well arranged (lean) configuration file
|
||||
- simple to build/install, configure and maintain
|
||||
- supports IPv6 and SSL
|
||||
- no problems with servers that have dynamic IP addresses
|
||||
- freely available, modern, portable and tidy C-source
|
||||
- ngIRCd is being actively developed since 11 years.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
@@ -54,7 +50,7 @@ make %{?_smp_mflags}
|
||||
|
||||
%files
|
||||
%defattr(755,root,root)
|
||||
%doc AUTHORS COPYING ChangeLog INSTALL NEWS README doc/*
|
||||
%doc AUTHORS COPYING ChangeLog INSTALL.md NEWS README.md doc/*
|
||||
%config(noreplace) /etc
|
||||
%{_prefix}/sbin
|
||||
%{_mandir}/man5/ngircd.conf*
|
||||
|
28
contrib/nglog.sh
Executable file
28
contrib/nglog.sh
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2020 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# 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.
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
#
|
||||
# This script parses the log output of ngircd(8), and colorizes the messages
|
||||
# accoring to their log level. Example usage:
|
||||
# ./src/ngircd/ngircd -f $PWD/doc/sample-ngircd.conf -np | ./contrib/nglog.sh
|
||||
#
|
||||
|
||||
gawk '
|
||||
/^\[[[:digit:]]+:0 / {print "\033[1;95m" $0 "\033[0m"}
|
||||
/^\[[[:digit:]]+:1 / {print "\033[1;35m" $0 "\033[0m"}
|
||||
/^\[[[:digit:]]+:2 / {print "\033[1;91m" $0 "\033[0m"}
|
||||
/^\[[[:digit:]]+:3 / {print "\033[1;31m" $0 "\033[0m"}
|
||||
/^\[[[:digit:]]+:4 / {print "\033[1;33m" $0 "\033[0m"}
|
||||
/^\[[[:digit:]]+:5 / {print "\033[1m" $0 "\033[0m"}
|
||||
/^\[[[:digit:]]+:6 / {print $0}
|
||||
/^\[[[:digit:]]+:7 / {print "\033[90m" $0 "\033[0m"}
|
||||
' </dev/stdin &
|
||||
|
||||
wait
|
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2010 Alexander Barton <alex@barton.de>
|
||||
# Copyright (c)2001-2016 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# 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
|
||||
@@ -14,67 +14,130 @@
|
||||
# suitable for inclusion in doc/Platforms.txt -- please send reports
|
||||
# to the ngIRCd mailing list: <ngircd-ml@ngircd.barton.de>.
|
||||
|
||||
NAME=`basename "$0"`
|
||||
NAME=$(basename "$0")
|
||||
VERBOSE=
|
||||
CLEAN=1
|
||||
|
||||
PLATFORM=
|
||||
COMPILER="unknown"
|
||||
VERSION="unknown"
|
||||
DATE=`date "+%y-%m-%d"`
|
||||
|
||||
CONFIGURE=
|
||||
MAKE=
|
||||
CHECK=
|
||||
RUN=
|
||||
DATE=$(date "+%y-%m-%d")
|
||||
COMMENT=
|
||||
|
||||
R_CONFIGURE=
|
||||
R_MAKE=
|
||||
R_CHECK=
|
||||
R_CHECK_Y="?"
|
||||
R_RUN=
|
||||
|
||||
SRC_D=$(dirname "$0")
|
||||
MY_D="$PWD"
|
||||
|
||||
[ -n "$MAKE" ] || MAKE="make"
|
||||
export MAKE CC
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
"-v")
|
||||
VERBOSE=1
|
||||
;;
|
||||
"-x")
|
||||
CLEAN=
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $NAME [-v]"
|
||||
echo "Usage: $NAME [-v] [-x]"
|
||||
echo
|
||||
echo " -v Verbose output"
|
||||
echo " -x Don't regenerate build system, even when possible"
|
||||
echo
|
||||
exit 2
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
for cmd in telnet expect; do
|
||||
command -v "$cmd" >/dev/null 2>&1 \
|
||||
|| echo "$NAME: WARNING: $cmd(1) not found, \"make check\" won't run all tests!"
|
||||
done
|
||||
|
||||
echo "$NAME: Checking ngIRCd base source directory ..."
|
||||
grep "ngIRCd" ./ChangeLog >/dev/null 2>&1
|
||||
grep "ngIRCd" "$SRC_D/ChangeLog" >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
grep "ngIRCd" ../ChangeLog >/dev/null 2>&1
|
||||
grep "ngIRCd" "$SRC_D/../ChangeLog" >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "$NAME: ngIRCd base source directory not found!?"
|
||||
exit 1
|
||||
fi
|
||||
cd ..
|
||||
SRC_D="$SRC_D/.."
|
||||
fi
|
||||
echo "$NAME: - source directory: $SRC_D"
|
||||
echo "$NAME: - working directory: $MY_D"
|
||||
|
||||
echo "$NAME: Checking for GIT tree ..."
|
||||
if [ -d "$SRC_D/.git" ]; then
|
||||
echo "$NAME: Checking for \"git\" command ..."
|
||||
git version >/dev/null 2>&1
|
||||
if [ $? -eq 0 ] && [ -n "$CLEAN" ]; then
|
||||
echo "$NAME: Running \"git clean\" ..."
|
||||
cd "$SRC_D" || exit 1
|
||||
if [ -n "$VERBOSE" ]; then
|
||||
git clean -dxf
|
||||
else
|
||||
git clean -dxf >/dev/null
|
||||
fi
|
||||
cd "$MY_D" || exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$NAME: Checking for \"./autogen.sh\" script ..."
|
||||
if [ -r ./autogen.sh ]; then
|
||||
echo "$NAME: Running \"./autogen.sh\" ..."
|
||||
[ -n "$VERBOSE" ] && ./autogen.sh || ./autogen.sh >/dev/null
|
||||
echo "$NAME: Checking for \"$SRC_D/configure\" script ..."
|
||||
if [ ! -r "$SRC_D/configure" ]; then
|
||||
echo "$NAME: Running \"$SRC_D/autogen.sh\" ..."
|
||||
cd "$SRC_D" || exit 1
|
||||
if [ -n "$VERBOSE" ]; then
|
||||
./autogen.sh
|
||||
else
|
||||
./autogen.sh >/dev/null
|
||||
fi
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "$NAME: \"$SRC_D/autogen.sh\" script failed, aborting!"
|
||||
exit 1
|
||||
fi
|
||||
cd "$MY_D" || exit 1
|
||||
fi
|
||||
|
||||
if [ -r ./configure ]; then
|
||||
echo "$NAME: Running \"./configure\" script ..."
|
||||
[ -n "$VERBOSE" ] && ./configure || ./configure >/dev/null
|
||||
if [ $? -eq 0 -a -r ./Makefile ]; then
|
||||
CONFIGURE=1
|
||||
echo "$NAME: Running \"make\" ..."
|
||||
[ -n "$VERBOSE" ] && make || make >/dev/null
|
||||
if [ $? -eq 0 -a -x src/ngircd/ngircd ]; then
|
||||
MAKE=1
|
||||
echo "$NAME: Running \"make check\" ..."
|
||||
[ -n "$VERBOSE" ] && make check || make check >/dev/null
|
||||
if [ -r "$SRC_D/configure" ]; then
|
||||
echo "$NAME: Running \"$SRC_D/configure\" script ..."
|
||||
if [ -n "$VERBOSE" ]; then
|
||||
"$SRC_D/configure" -C
|
||||
else
|
||||
"$SRC_D/configure" -C >/dev/null
|
||||
fi
|
||||
if [ $? -eq 0 ] && [ -r ./Makefile ]; then
|
||||
R_CONFIGURE=1
|
||||
rm -f "src/ngircd/ngircd"
|
||||
echo "$NAME: Running \"$MAKE\" ..."
|
||||
if [ -n "$VERBOSE" ]; then
|
||||
"$MAKE"
|
||||
else
|
||||
"$MAKE" >/dev/null
|
||||
fi
|
||||
if [ $? -eq 0 ] && [ -x src/ngircd/ngircd ]; then
|
||||
R_MAKE=1
|
||||
echo "$NAME: Running \"$MAKE check\" ..."
|
||||
if [ -n "$VERBOSE" ]; then
|
||||
"$MAKE" check
|
||||
else
|
||||
"$MAKE" check >/dev/null
|
||||
fi
|
||||
if [ $? -eq 0 ]; then
|
||||
CHECK=1
|
||||
RUN=$CHECK
|
||||
R_CHECK=1
|
||||
R_RUN=$R_CHECK
|
||||
[ -r ./src/testsuite/tests-skipped.lst ] \
|
||||
&& R_CHECK_Y="y" || R_CHECK_Y="Y"
|
||||
else
|
||||
./src/ngircd/ngircd --help 2>/dev/null \
|
||||
| grep "^ngircd" >/dev/null
|
||||
[ $? -eq 0 ] && RUN=1
|
||||
| grep "^ngIRCd" >/dev/null
|
||||
[ $? -eq 0 ] && R_RUN=1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -82,13 +145,13 @@ fi
|
||||
|
||||
# Get target platform information
|
||||
if [ -r "src/config.h" ]; then
|
||||
CPU=`grep "TARGET_CPU" "src/config.h" | cut -d'"' -f2`
|
||||
OS=`grep "TARGET_OS" "src/config.h" | cut -d'"' -f2`
|
||||
VENDOR=`grep "TARGET_VENDOR" "src/config.h" | cut -d'"' -f2`
|
||||
CPU=$(grep "HOST_CPU" "src/config.h" | cut -d'"' -f2)
|
||||
OS=$(grep "HOST_OS" "src/config.h" | cut -d'"' -f2)
|
||||
VENDOR=$(grep "HOST_VENDOR" "src/config.h" | cut -d'"' -f2)
|
||||
PLATFORM="$CPU/$VENDOR/$OS"
|
||||
fi
|
||||
if [ -z "$PLATFORM" ]; then
|
||||
PLATFORM="`uname 2>/dev/null` `uname -r 2>/dev/null`, `uname -m 2>/dev/null`"
|
||||
PLATFORM="$(uname 2>/dev/null) $(uname -r 2>/dev/null), $(uname -m 2>/dev/null)"
|
||||
fi
|
||||
|
||||
# Get compiler information
|
||||
@@ -96,61 +159,100 @@ if [ -r "Makefile" ]; then
|
||||
CC=$(grep "^CC = " Makefile | cut -d' ' -f3)
|
||||
$CC --version 2>&1 | grep -i "GCC" >/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
COMPILER=$($CC --version | head -1 \
|
||||
| cut -d')' -f2 | cut -d' ' -f2)
|
||||
COMPILER="gcc $COMPILER"
|
||||
# GCC, or compiler that mimics GCC
|
||||
$CC --version 2>&1 | grep -i "Open64" >/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
COMPILER="Open64"
|
||||
else
|
||||
COMPILER=$($CC --version | head -1 \
|
||||
| cut -d')' -f2 | cut -d' ' -f2)
|
||||
COMPILER="gcc $COMPILER"
|
||||
fi
|
||||
else
|
||||
case "$CC" in
|
||||
gcc*)
|
||||
v="`$CC --version 2>/dev/null | head -1`"
|
||||
[ -n "$v" ] && COMPILER="gcc $v"
|
||||
;;
|
||||
esac
|
||||
# Non-GCC compiler
|
||||
$CC --version 2>&1 | grep -i "clang" >/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
COMPILER=$($CC --version 2>/dev/null | head -1 \
|
||||
| cut -d'(' -f1 | cut -d'-' -f1 \
|
||||
| sed -e 's/version //g' | sed -e 's/Apple /A-/g' \
|
||||
| sed -e 's/Debian //g' | sed -e 's/LLVM /clang /g')
|
||||
fi
|
||||
$CC -version 2>&1 | grep -i "tcc" >/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
COMPILER=$($CC -version 2>/dev/null | head -1 \
|
||||
| cut -d'(' -f1 | sed -e 's/version //g')
|
||||
fi
|
||||
if [ "$COMPILER" = "unknown" ]; then
|
||||
v="$($CC --version 2>/dev/null | head -1)"
|
||||
[ -z "$v" ] && v="$($CC -version 2>/dev/null | head -1)"
|
||||
[ -n "$v" ] && COMPILER="$v"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Get ngIRCd version information
|
||||
eval $(grep "^VERSION = " Makefile | sed -e 's/ //g')
|
||||
eval "$(grep "^VERSION = " Makefile | sed -e 's/ //g')"
|
||||
case "$VERSION" in
|
||||
*-*-*)
|
||||
VERSION=`echo "$VERSION" | cut -d'-' -f3 | cut -b2-`
|
||||
*~*-*)
|
||||
VERSION=$(echo "$VERSION" | cut -b1-10)
|
||||
;;
|
||||
esac
|
||||
[ -n "$VERSION" ] || VERSION="unknown"
|
||||
|
||||
# Get IO interface information
|
||||
if [ "$OS" = "linux-gnu" ]; then
|
||||
COMMENT="(1)"
|
||||
COMMENT="1"
|
||||
else
|
||||
grep "^#define HAVE_SYS_DEVPOLL_H 1" src/config.h >/dev/null 2>&1
|
||||
[ $? -eq 0 ] && COMMENT="(4)"
|
||||
[ $? -eq 0 ] && COMMENT="4"
|
||||
grep "^#define HAVE_EPOLL_CREATE 1" src/config.h >/dev/null 2>&1
|
||||
[ $? -eq 0 ] && COMMENT="(5)"
|
||||
[ $? -eq 0 ] && COMMENT="5"
|
||||
grep "^#define HAVE_KQUEUE 1" src/config.h >/dev/null 2>&1
|
||||
[ $? -eq 0 ] && COMMENT="(3)"
|
||||
[ $? -eq 0 ] && COMMENT="3"
|
||||
fi
|
||||
|
||||
[ -n "$CONFIGURE" ] && C="Y" || C="N"
|
||||
[ -n "$MAKE" ] && M="Y" || M="N"
|
||||
[ -n "$CHECK" ] && T="Y" || T="N"
|
||||
[ -n "$RUN" ] && R="Y" || R="N"
|
||||
[ -n "$R_CONFIGURE" ] && C="Y" || C="N"
|
||||
[ -n "$R_MAKE" ] && M="Y" || M="N"
|
||||
[ -n "$R_CHECK" ] && T="$R_CHECK_Y" || T="N"
|
||||
if [ -n "$R_RUN" ]; then
|
||||
# Mark "runs" with "Y" only when the test suite succeeded:
|
||||
[ "$T" = "N" ] && R="?" || R="Y"
|
||||
else
|
||||
R="N"
|
||||
fi
|
||||
[ -n "$COMMENT" ] && COMMENT=" $COMMENT"
|
||||
|
||||
echo
|
||||
echo " the executable works (\"runs\") as expected --+"
|
||||
echo " tests run successfully (\"make check\") --+ |"
|
||||
echo " ngIRCd compiles (\"make\") --+ | |"
|
||||
echo " ./configure works --+ | | |"
|
||||
echo " | | | |"
|
||||
echo "Platform Compiler ngIRCd Date Tester C M T R See"
|
||||
echo "--------------------------- ------------ ---------- -------- ------ - - - - ---"
|
||||
type printf >/dev/null 2>&1
|
||||
echo " the executable works (\"runs\") as expected --+"
|
||||
echo " tests run successfully (\"make check\") --+ |"
|
||||
echo " ngIRCd compiles (\"make\") --+ | |"
|
||||
echo " ./configure works --+ | | |"
|
||||
echo " | | | |"
|
||||
echo "Platform Compiler ngIRCd Date Tester C M T R *"
|
||||
echo "--------------------------- ------------ ---------- -------- -------- - - - - -"
|
||||
command -v printf >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
printf "%-27s %-12s %-10s %s %-6s %s %s %s %s%s" \
|
||||
"$PLATFORM" "$COMPILER" "$VERSION" "$DATE" "$USER" \
|
||||
printf "%-27s %-12s %-10s %s %-8s %s %s %s %s%s\n" \
|
||||
"$PLATFORM" "$COMPILER" "$VERSION" "$DATE" "$LOGNAME" \
|
||||
"$C" "$M" "$T" "$R" "$COMMENT"
|
||||
else
|
||||
echo "$PLATFORM $COMPILER $VERSION $DATE $USER" \
|
||||
echo "$PLATFORM $COMPILER $VERSION $DATE $LOGNAME" \
|
||||
"$C" "$M" "$T" "$R" "$COMMENT"
|
||||
fi
|
||||
echo; echo
|
||||
echo
|
||||
|
||||
double_check() {
|
||||
echo "Please double check that the ngIRCd daemon starts up, runs and handles IRC"
|
||||
echo "connections successfully!"
|
||||
}
|
||||
|
||||
if [ "$R_CHECK_Y" = "y" ]; then
|
||||
echo "WARNING: Some tests have been skipped!"
|
||||
double_check
|
||||
echo
|
||||
fi
|
||||
if [ "$R" = "?" ]; then
|
||||
echo "WARNING: The resulting binary passed simple tests, but the test suite failed!"
|
||||
double_check
|
||||
echo
|
||||
fi
|
||||
|
@@ -1,77 +0,0 @@
|
||||
#
|
||||
# Sample systrace policy for ngIRCd on OpenBSD
|
||||
# Author: Benjamin Pineau <ben@zouh.org>
|
||||
#
|
||||
# $Id: systrace.policy,v 1.1 2004/04/28 12:16:59 alex Exp $
|
||||
#
|
||||
# Tune me, put me in /etc/systrace/usr_local_bin_ngircd and start ngIRCd
|
||||
# (with root privileges) as:
|
||||
#
|
||||
# systrace -a /usr/local/bin/ngircd
|
||||
#
|
||||
# I didn't tried this on NetBSD, but it should work as is.
|
||||
#
|
||||
# On systems with pf, it can be supplemented by strict firewall rules:
|
||||
# for a ngircd running as '$ircuser', binding on '$ircport' and accepting
|
||||
# 30 connections:
|
||||
#
|
||||
# block out log quick proto tcp from any port $ircport to any \
|
||||
# user != $ircuser
|
||||
# pass in inet proto tcp from any to any port $ircport user $ircuser \
|
||||
# keep state (max 30) flags S/SA
|
||||
#
|
||||
|
||||
Policy: /usr/local/bin/ngircd, Emulation: native
|
||||
native-__sysctl: permit
|
||||
native-fsread: filename eq "/etc/malloc.conf" then permit
|
||||
native-fsread: filename sub "/usr/share/zoneinfo/" then permit
|
||||
native-fsread: filename eq "/usr/local/etc/ngircd.conf" then permit
|
||||
native-fsread: filename eq "/usr/local/etc/ngircd.motd" then permit
|
||||
native-fsread: filename eq "/etc/ngircd.conf" then permit
|
||||
native-fsread: filename eq "/etc/ngircd.motd" then permit
|
||||
native-fsread: filename eq "/etc/spwd.db" then deny[eperm]
|
||||
native-fsread: filename eq "/etc/group" then permit
|
||||
native-fsread: filename eq "/etc/resolv.conf" then permit
|
||||
native-fsread: filename eq "/etc/localtime" then permit
|
||||
native-fsread: filename eq "/etc/hosts" then permit
|
||||
native-fsread: filename sub "<non-existent filename>" then deny[enoent]
|
||||
native-socket: sockdom eq "AF_UNIX" and socktype eq "SOCK_DGRAM" then permit
|
||||
native-socket: sockdom eq "AF_INET" and socktype eq "SOCK_STREAM" then permit
|
||||
native-bind: sockaddr match "inet-*:6667" then permit, if user != root
|
||||
native-connect: sockaddr eq "/dev/log" then permit, if user != root
|
||||
native-connect: sockaddr match "inet-*:53" then permit, if user != root
|
||||
native-setsockopt: permit, if user != root
|
||||
native-listen: permit, if user != root
|
||||
native-accept: permit, if user != root
|
||||
native-sendto: true then permit, if user != root
|
||||
native-recvfrom: permit, if user != root
|
||||
native-read: permit
|
||||
native-pread: permit
|
||||
native-write: permit, if user != root
|
||||
native-mmap: permit
|
||||
native-munmap: permit
|
||||
native-mprotect: permit
|
||||
native-break: permit
|
||||
native-umask: permit
|
||||
native-fork: permit
|
||||
native-setsid: permit
|
||||
native-chdir: permit
|
||||
native-chroot: permit
|
||||
native-setgid: gid neq "0" then permit
|
||||
native-setuid: uid neq "0" and uname neq "root" then permit
|
||||
native-getuid: permit
|
||||
native-getgid: permit
|
||||
native-gettimeofday: permit
|
||||
native-getpid: permit
|
||||
native-select: permit
|
||||
native-fcntl: permit
|
||||
native-fstat: permit
|
||||
native-issetugid: permit
|
||||
native-sigaction: permit
|
||||
native-pipe: permit
|
||||
native-sigreturn: permit
|
||||
native-close: permit
|
||||
native-exit: permit
|
||||
native-fswrite: deny[eperm]
|
||||
|
||||
# -eof-
|
1
doc/.gitignore
vendored
1
doc/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
sample-ngircd.conf
|
16
doc/Bopm.txt
16
doc/Bopm.txt
@@ -1,9 +1,8 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2010 Alexander Barton,
|
||||
alex@barton.de, http://www.barton.de/
|
||||
|
||||
(c)2001-2014 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -18,7 +17,7 @@ monitor, designed for use with hybrid-based ircds, although it can be used
|
||||
with slight modification on any server which has the ability to show connects
|
||||
to opers and that supports KLINEs."
|
||||
|
||||
And starting with Release 17, ngIRCd supports all required log messages that
|
||||
Starting with Release 17, ngIRCd supports all required log messages that
|
||||
BOPM requires to be useful.
|
||||
|
||||
II. Installation
|
||||
@@ -37,11 +36,12 @@ a) BOPM "IRC" section:
|
||||
3) change "mode" to "+ci" or "+c".
|
||||
|
||||
4) Set "connregex" to the following string, everything in one line(!):
|
||||
"\\*\\*\\* Notice -- Client connecting: ([^ ]+) \\(([^@]+)@([^\\)]+)\\) \\[([0-9\\.]+)\\].*";
|
||||
and comment all the other "connregex" examples (prepend a "#" character).
|
||||
"Client connecting: ([^ ]+) \\(([^@]+)@([^\\)]+)\\) \\[([0-9\\.]+)\\].*";
|
||||
and comment out all the other "connregex" examples (that is, prepend a
|
||||
"#" character).
|
||||
|
||||
5) Set "kline" to "KILL %n :Open proxy found on your host!"; for example,
|
||||
and comment all the other "kline" examples.
|
||||
5) Set "kline" to "GLINE *@%h :Open proxy found on your host!";
|
||||
and comment out all the other "kline" examples.
|
||||
|
||||
b) BOPM "scanner" section:
|
||||
|
||||
|
28
doc/Capabilities.txt
Normal file
28
doc/Capabilities.txt
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2012 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- Capabilities.txt --
|
||||
|
||||
|
||||
This document lists and describes the "IRC capabilities" that ngIRCd supports
|
||||
and can be requested by a IRC/IRCv3 client that supports the "CAP" command.
|
||||
|
||||
ngIRCd implements the "IRC Client Capabilities Extension" as described here:
|
||||
<http://ircv3.net/specs/core/capability-negotiation-3.1.html>
|
||||
|
||||
|
||||
I. Supported Capabilities
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* "multi-prefix"
|
||||
|
||||
When requested, the multi-prefix client capability will cause the IRC
|
||||
server to send all possible prefixes which apply to a user in NAMES and
|
||||
WHO output.
|
||||
|
||||
See <http://ircv3.net/specs/extensions/multi-prefix-3.1.html>.
|
996
doc/Commands.txt
Normal file
996
doc/Commands.txt
Normal file
@@ -0,0 +1,996 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2019 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- Commands.txt --
|
||||
|
||||
|
||||
This file lists all commands available on ngIRCd. It is written in a format
|
||||
that is human readable as well as machine parseable and therefore can be used
|
||||
as "help text file" of the daemon.
|
||||
|
||||
In short, the daemon reads this file on startup and parses it as following
|
||||
when an user issues a "HELP <cmd>" command:
|
||||
|
||||
1. Search the file for a line "- <cmd>",
|
||||
2. Output all subsequent lines that start with a TAB (ASCII 9) character
|
||||
to the client using NOTICE commands, treat lines containing a single "."
|
||||
after the TAB as empty lines.
|
||||
3. Break at the first line not starting with a TAB character.
|
||||
|
||||
This format allows to have information to each command stored in this file
|
||||
which will not be sent to an IRC user requesting help which enables us to
|
||||
have additional annotations stored here which further describe the origin,
|
||||
implementation details, or limits of the specific command which are not
|
||||
relevant to an end-user but administrators and developers.
|
||||
|
||||
A special "Intro" block is returned to the user when the HELP command is
|
||||
used without a command name:
|
||||
|
||||
|
||||
- Intro
|
||||
This is ngIRCd, a server software for Internet Relay Chat (IRC)
|
||||
networks. You can find more information about ngIRCd on its homepage:
|
||||
<http://ngircd.barton.de>
|
||||
.
|
||||
Use "HELP COMMANDS" to get a list of all available commands and
|
||||
"HELP <command-name>" to get help for a specific IRC command, for
|
||||
example "HELP quit" or "HELP privmsg".
|
||||
|
||||
|
||||
Connection Handling Commands
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- CAP
|
||||
CAP LS
|
||||
CAP LIST
|
||||
CAP REQ <capabilities>
|
||||
CAP ACK <capabilities>
|
||||
CAP NAK <capabilities>
|
||||
CAP CLEAR
|
||||
CAP END
|
||||
.
|
||||
List, request, and clear "IRC Capabilities".
|
||||
.
|
||||
Using this command, an IRC client can request additional "IRC
|
||||
capabilities" during login or later on, which influences the
|
||||
communication between server and client. Normally, these commands
|
||||
aren't directly used by humans, but automatically by their client
|
||||
software. And please note that issuing such commands manually can
|
||||
irritate the client software used, because of the "non-standard"
|
||||
behavior of the server!
|
||||
.
|
||||
- CAP LS: list all available capabilities.
|
||||
- CAP LIST: list active capabilities of this connection.
|
||||
- CAP REQ: Request particular capabilities.
|
||||
- CAP ACK: Acknowledge a set of capabilities to be enabled/disabled.
|
||||
- CAP NAK: Reject a set of capabilities.
|
||||
- CAP CLEAR: Clear all set capabilities.
|
||||
- CAP END: Indicate end of capability negotiation during login,
|
||||
ignored in an fully registered session.
|
||||
|
||||
Please note that the <capabilities> must be given in a single
|
||||
parameter but whitespace separated, therefore a command could look
|
||||
like this: "CAP REQ :capability1 capability2 capability3" for example.
|
||||
|
||||
References:
|
||||
- <http://ircv3.net/specs/core/capability-negotiation-3.1.html>
|
||||
- <http://ngircd.barton.de/doc/Capabilities.txt>
|
||||
- doc/Capabilities.txt
|
||||
|
||||
- CHARCONV
|
||||
CHARCONV <client-charset>
|
||||
.
|
||||
Set client character set encoding to <client-charset>.
|
||||
.
|
||||
After receiving such a command, the server translates all message
|
||||
data received from the client using the set <client-charset> to the
|
||||
server encoding (UTF-8), and all message data which is to be sent to
|
||||
the client from the server encoding (UTF-8) to <client-charset>.
|
||||
.
|
||||
This enables older clients and clients using "strange" character sets
|
||||
to transparently participate in channels and direct messages to
|
||||
clients using UTF-8, which should be the default today.
|
||||
|
||||
References:
|
||||
- IRC+, <http://ngircd.barton.de/doc/Protocol.txt>
|
||||
- IRC+, doc/Protocol.txt
|
||||
|
||||
- NICK
|
||||
NICK <nickname>
|
||||
NICK <nickname> [<hops>]
|
||||
NICK <nickname> <hops> <username> <host> <servertoken> <usermodes> <realname>
|
||||
.
|
||||
Set or change the <nickname> of a client (first form) and register
|
||||
remote clients (second and third form; servers only).
|
||||
|
||||
References:
|
||||
- RFC 1459, 4.1.2 "Nick message" (old client and server protocol)
|
||||
- RFC 2812, 3.1.2 "Nick message" (client protocol)
|
||||
- RFC 2813, 4.1.3 "Nick" (server protocol)
|
||||
|
||||
- PASS
|
||||
PASS <password>
|
||||
PASS <password> <version> <flags> [<options>]
|
||||
.
|
||||
Set a connection <password>. This command must be the first command
|
||||
sent to the server, even before the NICK/USER or SERVER commands.
|
||||
.
|
||||
The first form is used by user sessions or (old) RFC 1459 servers,
|
||||
the second form is used by RFC 2812 or IRC+ compliant servers and
|
||||
enables the server to indicate its version and supported protocol
|
||||
features.
|
||||
|
||||
References:
|
||||
- RFC 1459, 4.1.1 "Password message" (old client and server protocol)
|
||||
- RFC 2812, 3.1.1 "Password message" (client protocol)
|
||||
- RFC 2813, 4.1.1 "Password message" (server protocol)
|
||||
- IRC+, <http://ngircd.barton.de/doc/Protocol.txt>
|
||||
- IRC+, doc/Protocol.txt
|
||||
|
||||
- PING
|
||||
PING <token> [<target>]
|
||||
.
|
||||
Tests the presence of a connection to a client or server.
|
||||
.
|
||||
If no <target> has been given, the local server is used. User clients
|
||||
can only use other servers as <target>, no user clients.
|
||||
.
|
||||
A PING message results in a PONG reply containing the <token>, which
|
||||
can be arbitrary text.
|
||||
|
||||
Please note:
|
||||
The RFCs state that the <token> parameter is used to specify the
|
||||
origin of the PING command when forwarded in the network, but this
|
||||
is not the case: the sender is specified using the prefix as usual,
|
||||
and the parameter is used to identify the PONG reply in practice.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.7.2 "Ping message"
|
||||
|
||||
- PONG
|
||||
PONG <target> [<token>]
|
||||
.
|
||||
Reply to a "PING" command, indicate that the connection is alive.
|
||||
.
|
||||
The <token> is the arbitrary text received in the "PING" command and
|
||||
can be used to identify the correct PONG sent as answer.
|
||||
.
|
||||
When the "PONG" command is received from a user session, the <target>
|
||||
parameter is ignored; otherwise the PONG is forwarded to this client.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.7.3 "Pong message"
|
||||
|
||||
- QUIT
|
||||
QUIT [<quit-message>]
|
||||
.
|
||||
Terminate a user session.
|
||||
.
|
||||
When received from a user, the server acknowledges this by sending
|
||||
an "ERROR" message back to the client and terminates the connection.
|
||||
.
|
||||
When a <quit-message> has been given, it is sent to all the channels
|
||||
that the client is a member of when leaving.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.1.7 "Quit"
|
||||
- RFC 2813, 4.1.5 "Quit"
|
||||
|
||||
- USER
|
||||
USER <username> <hostname> <unused> <realname>
|
||||
.
|
||||
Register (and authenticate) a new user session with a short <username>
|
||||
and a human-readable <realname>.
|
||||
.
|
||||
The parameter <hostname> is only used when received by an other server
|
||||
and ignored otherwise; and the parameter <unused> is always ignored.
|
||||
But both parameters are required on each invocation by the protocol
|
||||
and can be set to arbitrary characters/text when not used.
|
||||
.
|
||||
If <username> contains an "@" character, the full <username> is used
|
||||
for authentication, but only the first part up to this character is
|
||||
set as "user name" for this session.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.1.3 "User message"
|
||||
|
||||
- WEBIRC
|
||||
WEBIRC <password> <username> <hostname> <ip-address>
|
||||
.
|
||||
Allow Web-to-IRC gateway software (for example) to set the correct
|
||||
user name and host name of users instead of their own.
|
||||
.
|
||||
It must be the very first command sent to the server, even before
|
||||
USER and NICK commands!
|
||||
.
|
||||
The <password> must be set in the server configuration file to prevent
|
||||
unauthorized clients to fake their identity; it is an arbitrary string.
|
||||
|
||||
References:
|
||||
- IRC+, <http://ngircd.barton.de/doc/Protocol.txt>
|
||||
- IRC+, doc/Protocol.txt
|
||||
|
||||
|
||||
General Commands
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
- AWAY
|
||||
AWAY [<message>]
|
||||
.
|
||||
Provides the server with a message to automatically send in reply to a
|
||||
PRIVMSG directed at the user, but not to a channel they are on.
|
||||
.
|
||||
If <message> is omitted, the away status is removed.
|
||||
|
||||
References:
|
||||
- RFC 2812, 4.1 "Away"
|
||||
|
||||
- HELP
|
||||
HELP [<command>]
|
||||
.
|
||||
Show help information for a specific IRC <command>. The <command> name
|
||||
is case-insensitive.
|
||||
.
|
||||
Use the command "HELP Commands" to get a list of all available commands.
|
||||
|
||||
The HELP command isn't specified by any RFC but implemented by most
|
||||
daemons. If no help text could be read in, ngIRCd outputs a list of all
|
||||
implemented commands when receiving a plain "HELP" command as well as
|
||||
on "HELP Commands".
|
||||
|
||||
ngIRCd replies using "NOTICE" commands like ircd 2.10/2.11; other
|
||||
implementations are using numerics 704, 705, and 706.
|
||||
|
||||
- MODE
|
||||
MODE <nickname> [{+|-}<mode>[<mode>] [{+|-}<mode>[<mode>] [...]]]
|
||||
MODE <channel> [{+|-}<mode>[<mode>] [<arg> [<arg> [...]]] [{+|-}<mode>[<mode>] [<arg> [<arg> [...]]] [...]]]
|
||||
.
|
||||
Set and get user and channel modes.
|
||||
.
|
||||
When no mode parameters are given, the currently set user or channel
|
||||
modes are returned. Otherwise the modes are adjusted accordingly
|
||||
and the changes will be reported back to the client.
|
||||
.
|
||||
All user and channel "modes" are indicated by single case-sensitive
|
||||
characters.
|
||||
.
|
||||
Please note that a user can only get and set his own modes, and not
|
||||
all user "levels" are allowed to change all channel modes ...
|
||||
.
|
||||
The mode parameters can become quite complex, especially when dealing
|
||||
with channel modes that require additional arguments:
|
||||
.
|
||||
{+|-}<mode(s}> -- set or unset one or more modes.
|
||||
+<mode(s)> -<mode(s)> -- set some modes and unset others.
|
||||
+<modes> <arg1> <arg2> -- set (at least) two modes with arguments.
|
||||
.
|
||||
Some examples:
|
||||
.
|
||||
MODE nick +i -- set user to "invisible".
|
||||
MODE #chan +tn -- set "topic lock" and "no external messages".
|
||||
MODE #chan -t +l 50 -- remove "topic lock", set "user limit" to 50.
|
||||
MODE #chan +ov nick1 nick2 -- set "channel op" and "voice" mode
|
||||
to nick1 and nick2 in channel #chan.
|
||||
.
|
||||
A complete list of all modes supported by ngIRCd can be found online
|
||||
here: <http://ngircd.barton.de/doc/Modes.txt>.
|
||||
|
||||
References:
|
||||
- RFC 2811, 4. "Channel Modes"
|
||||
- RFC 2812, 3.1.5 "User mode message"
|
||||
- RFC 2812, 3.2.3 "Channel mode message"
|
||||
- <http://ngircd.barton.de/doc/Modes.txt>
|
||||
- doc/Modes.txt
|
||||
|
||||
- NOTICE
|
||||
NOTICE <target>[,<target>[,...]] <message>
|
||||
.
|
||||
Send a <message> to a given <target>, which can be a user or a
|
||||
channel, but DON'T report any error.
|
||||
.
|
||||
The "NOTICE" command exactly behaves like the "PRIVMSG" command, but
|
||||
doesn't report any errors it encounters (like an unknown <target>).
|
||||
Please see the help text of the "PRIVMSG" command for a detailed
|
||||
description of the parameters!
|
||||
|
||||
References:
|
||||
- RFC 2812, 2.3.1 "Message format in Augmented BNF"
|
||||
- RFC 2812, 3.3 "Sending messages"
|
||||
- RFC 2812, 3.3.2 "Notice"
|
||||
|
||||
- PRIVMSG
|
||||
PRIVMSG <target>[,<target>[,...]] <message>
|
||||
.
|
||||
Send a <message> to a given <target>, which can be a user or a
|
||||
channel, and report all errors.
|
||||
.
|
||||
The <target> must follow one of these syntax variants:
|
||||
.
|
||||
- <nickname>
|
||||
- <channel>
|
||||
- <user>[%<host>]@<server>
|
||||
- <user>%<host>
|
||||
- <nickname>!<user>@<host>
|
||||
.
|
||||
If the <target> is a user, a private message is sent directly to this
|
||||
user; if it resolves to a channel name, a public message is sent
|
||||
to all the members of that channel.
|
||||
.
|
||||
In addition, IRC Ops can use these two forms to specify the <target>:
|
||||
.
|
||||
- #<hostmask>
|
||||
- $<servermask>
|
||||
.
|
||||
The <mask> can contain the wildcard characters "*" and "?", but must
|
||||
contain at least one dot (".") and no wildcard after the last one.
|
||||
Then, the <message> is sent to all users matching this <mask>.
|
||||
.
|
||||
All warnings and errors are reported back to the initiator using
|
||||
numeric status codes, which is the only difference to the "NOTICE"
|
||||
command, which doesn't report back any errors or warnings at all.
|
||||
.
|
||||
Please note that clients often use "MSG" as an alias to PRIVMSG, and
|
||||
a command "QUERY <nick> [<message>]" to initiate private chats. Both
|
||||
are command extensions of the client and never sent to the server.
|
||||
|
||||
References:
|
||||
- RFC 2812, 2.3.1 "Message format in Augmented BNF"
|
||||
- RFC 2812, 3.3 "Sending messages"
|
||||
- RFC 2812, 3.3.1 "Private messages"
|
||||
|
||||
Status and Informational Commands
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- ADMIN
|
||||
ADMIN [<target>]
|
||||
.
|
||||
Show administrative information about an IRC server in the network.
|
||||
.
|
||||
<target> can be a server name, the nickname of a client connected to
|
||||
a specific server, or a mask matching a server name in the network.
|
||||
The server of the current connection is used when <target> is omitted.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.4.9 "Admin command"
|
||||
|
||||
- INFO
|
||||
INFO [<target>]
|
||||
.
|
||||
Show the version, birth & online time of an IRC server in the network.
|
||||
.
|
||||
<target> can be a server name, the nickname of a client connected to
|
||||
a specific server, or a mask matching a server name in the network.
|
||||
The server of the current connection is used when <target> is omitted.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.4.10 "Info command"
|
||||
|
||||
- ISON
|
||||
ISON <nickname> [<nickname> [...]]
|
||||
.
|
||||
Query online status of a list of nicknames. The server replies with
|
||||
a list only containing nicknames actually connected to a server in
|
||||
the network. If no nicknames of the given list are online, an empty
|
||||
list is returned to the client requesting the information.
|
||||
|
||||
Please note that "all" IRC daemons even parse separate nicknames in
|
||||
a single parameter (like ":nick1 nick2"), and therefore ngIRCd
|
||||
implements this behavior, too.
|
||||
|
||||
References:
|
||||
- RFC 2812, 4.9 "Ison message"
|
||||
|
||||
- LINKS
|
||||
LINKS [[<target>] <mask>]
|
||||
.
|
||||
List all servers currently registered in the network matching <mask>,
|
||||
or all servers if <mask> has been omitted, as seen by the server
|
||||
specified by <target> or the local server when <target> is omitted.
|
||||
.
|
||||
<target> can be a server name, the nickname of a client connected to
|
||||
a specific server, or a mask matching a server name in the network.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.4.5 "Links message"
|
||||
|
||||
- LUSERS
|
||||
LUSERS [<mask> [<target>]]
|
||||
.
|
||||
Return statistics about the number of clients (users, servers,
|
||||
services, ...) in the network as seen by the server <target>.
|
||||
.
|
||||
<target> can be a server name, the nickname of a client connected to
|
||||
a specific server, or a mask matching a server name in the network.
|
||||
The server of the current connection is used when <target> is omitted.
|
||||
|
||||
Please note that ngIRCd ignores the <mask> parameter entirely: it
|
||||
is not possible to get information for a part of the network only.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.4.2 "Lusers message"
|
||||
|
||||
- MOTD
|
||||
MOTD [<target>]
|
||||
.
|
||||
Show the "Message of the Day" (MOTD) of an IRC server in the network.
|
||||
.
|
||||
<target> can be a server name, the nickname of a client connected to
|
||||
a specific server, or a mask matching a server name in the network.
|
||||
The server of the current connection is used when <target> is omitted.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.4.1 "Motd message"
|
||||
|
||||
- NAMES
|
||||
NAMES [<channel>[,<channel>[,...]] [<target>]]
|
||||
.
|
||||
Show the list of users that are members of a particular <channel>
|
||||
(and that are visible for the client requesting this information) as
|
||||
seen by the server <target>. More than one <channel> can be given
|
||||
separated by "," (but not whitespaces!).
|
||||
.
|
||||
If <channel> has been omitted, all visible users are shown, grouped
|
||||
by channel name, and all visible users not being members of at least
|
||||
one channel are shown as members of the pseudo channel "*".
|
||||
.
|
||||
<target> can be a server name, the nickname of a client connected to
|
||||
a specific server, or a mask matching a server name in the network.
|
||||
The server of the current connection is used when <target> is omitted.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.2.5 "Names message"
|
||||
|
||||
- STATS
|
||||
STATS [<query> [<target>]]
|
||||
.
|
||||
Show statistics and other information of type <query> of a particular
|
||||
IRC server in the network.
|
||||
.
|
||||
The following <query> types are supported (case-insensitive where
|
||||
applicable):
|
||||
.
|
||||
- g Network-wide bans ("G-Lines").
|
||||
- k Server-local bans ("K-Lines").
|
||||
- L Link status (servers and user links).
|
||||
- l Link status (servers and own link).
|
||||
- m Command usage count.
|
||||
- u Server uptime.
|
||||
.
|
||||
<target> can be a server name, the nickname of a client connected to
|
||||
a specific server, or a mask matching a server name in the network.
|
||||
The server of the current connection is used when <target> is omitted.
|
||||
.
|
||||
To use "STATS L" the user must be an IRC Operator.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.4.4 "Stats message"
|
||||
|
||||
- TIME
|
||||
TIME [<target>]
|
||||
.
|
||||
Show the local time of an IRC server in the network.
|
||||
.
|
||||
<target> can be a server name, the nickname of a client connected to
|
||||
a specific server, or a mask matching a server name in the network.
|
||||
The server of the current connection is used when <target> is omitted.
|
||||
|
||||
References
|
||||
- RFC 2812, 3.4.6 "Time message"
|
||||
|
||||
- TRACE
|
||||
TRACE [<target>]
|
||||
.
|
||||
Find the route to a specific server and send information about its
|
||||
peers. Each server that processes this command reports back to the
|
||||
sender about it: the replies from pass-through servers form a chain
|
||||
which shows the route to the destination.
|
||||
.
|
||||
<target> can be a server name, the nickname of a client connected to
|
||||
a specific server, or a mask matching a server name in the network.
|
||||
The server of the current connection is used when <target> is omitted.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.4.8 "Trace message"
|
||||
|
||||
- USERHOST
|
||||
USERHOST <nickname> [<nickname> [...]]
|
||||
.
|
||||
Show flags and the hostmasks (<user>@<host>) of the <nickname>s,
|
||||
separated by spaces. The following flags are used:
|
||||
.
|
||||
- "-" The client is "away" (the mode "+a" is set on this client).
|
||||
- "+" Client seems to be available, at least it isn't marked "away".
|
||||
- "*" The client is an IRC operator (the mode "+o" is set).
|
||||
|
||||
References:
|
||||
- RFC 2812, 4.8 "Userhost message"
|
||||
|
||||
- VERSION
|
||||
VERSION [<target>]
|
||||
.
|
||||
Show version information about a particular IRC server in the network.
|
||||
.
|
||||
<target> can be a server name, the nickname of a client connected to
|
||||
a specific server, or a mask matching a server name in the network.
|
||||
The server of the current connection is used when <target> is omitted.
|
||||
.
|
||||
Please note: in normal operation, the version number ends in a dot
|
||||
(".", for example "ngIRCd-20.1."). If it ends in ".1" (for example
|
||||
"ngIRCd-20.1.1", same version than before!), the server is running in
|
||||
debug-mode; and if it ends in ".2", the "network sniffer" is active!
|
||||
Keep your privacy in mind ...
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.4.3 "Version message"
|
||||
|
||||
- WHO
|
||||
WHO [<mask> ["o"]]
|
||||
.
|
||||
Show a list of users who match the <mask>, or all visible users when
|
||||
the <mask> has been omitted. (Special case: the <mask> "0" is
|
||||
equivalent to "*")
|
||||
.
|
||||
If the flag "o" is given, the server will only return information about
|
||||
IRC Operators.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.6.1 "Who query"
|
||||
|
||||
- WHOIS
|
||||
WHOIS [<target>] <mask>[,<mask>[,...]]
|
||||
.
|
||||
Query information about users matching the <mask> parameter(s) as seen
|
||||
by the server <target>; up to 3 <masks> are supported.
|
||||
.
|
||||
<target> can be a server name, the nickname of a client connected to a
|
||||
specific server, or a mask matching a server name in the network. The
|
||||
server of the current connection is used when <target> is omitted.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.6.2 "Whois query"
|
||||
|
||||
- WHOWAS
|
||||
WHOWAS <nickname>[,<nickname>[,...]] [<count> [<target>]]
|
||||
.
|
||||
Query information about nicknames no longer in use in the network,
|
||||
either because of nickname changes or disconnects. The history is
|
||||
searched backwards, returning the most recent entry first. If there
|
||||
are multiple entries, up to <count> entries will be shown (or all of
|
||||
them, if no <count> has been given).
|
||||
.
|
||||
<target> can be a server name, the nickname of a client connected to a
|
||||
specific server, or a mask matching a server name in the network. The
|
||||
server of the current connection is used when <target> is omitted.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.6.3 "Whowas"
|
||||
|
||||
|
||||
Channel Commands
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
- INVITE
|
||||
INVITE <nickname> <channel>
|
||||
.
|
||||
Invite <nickname> to join channel <channel>.
|
||||
.
|
||||
<channel> does not have to exist, but if it does, only members of the
|
||||
channel are allowed to invite other users. If the channel mode "+i"
|
||||
is set, only channel "half-ops" (and above) may invite other clients,
|
||||
and if channel mode "+V" is set, nobody can invite other users.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.2.7 "Invite message"
|
||||
|
||||
- JOIN
|
||||
JOIN {<channel>[,<channel>[,...]] [<key>[,<key>[,...]]] | 0}
|
||||
.
|
||||
Makes the client join the <channel> (comma-separated list), specifying
|
||||
the channel keys ("passwords"). A <channel-key> is only needed if the
|
||||
<channel> has the mode "+k" set.
|
||||
.
|
||||
If the channel(s) do not exist, then they will be created.
|
||||
.
|
||||
Using "JOIN 0" parts all channels at once.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.2.1 "Join message" (client protocol)
|
||||
- RFC 2813, 4.2.1 "Join message" (server protocol)
|
||||
|
||||
- KICK
|
||||
KICK <channel>[,<channel>[,...]] <nickname>[,<nickname>[,...]] [<reason>]
|
||||
.
|
||||
Remove users(s) with <nickname>(s) from <channel>(s).
|
||||
.
|
||||
There must be either exactly one <channel> parameter and multiple
|
||||
<nickname> parameters, or as many <channel> parameters as there are
|
||||
<nickname> parameters. The <reason> is shown to the users being
|
||||
kicked, and the nickname of the current user is used when <reason>
|
||||
is omitted.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.2.8 "Kick command"
|
||||
|
||||
- LIST
|
||||
LIST [<mask>[,<mask>[,...]] [<server>]]
|
||||
.
|
||||
List all visible channels matching the <mask> (comma-separated list),
|
||||
or all channels when no <mask> was specified.
|
||||
.
|
||||
If <server> is given, the command will be forwarded to <server> for
|
||||
evaluation.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.2.6 "List message"
|
||||
|
||||
- PART
|
||||
PART <channel>[,<channel>[,...]] [<part-message>]
|
||||
.
|
||||
Leave <channel> (comma-separated list), optionally with sending a
|
||||
<part-message> to all the other channel members.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.2.2 "Part message"
|
||||
|
||||
- TOPIC
|
||||
TOPIC <channel> [<topic>]
|
||||
.
|
||||
Change or view the topic of a channel.
|
||||
.
|
||||
The topic for channel <channel> is returned if there is no <topic>
|
||||
given. If the <topic> parameter is present, the topic for that
|
||||
channel will be changed, if this action is allowed for the user
|
||||
requesting it. If the <topic> parameter is an empty string, the
|
||||
topic for that channel will be removed.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.2.4 "Topic message"
|
||||
|
||||
|
||||
Administrative Commands
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- CONNECT
|
||||
CONNECT <server> [<port> [<remote-server> [<my-pwd> <peer-pwd>]]]
|
||||
.
|
||||
Instructs the current server, or <remote-server> if specified,
|
||||
to connect to the server named <server>, which must be configured
|
||||
in the server configuration file.
|
||||
.
|
||||
To use this command, the user must be an IRC Operator. To establish
|
||||
a connection on a <remote-server>, you must have remote IRC operator
|
||||
privileges.
|
||||
.
|
||||
If <port>, <my-pwd> and <peer-pwd> are given, these values override
|
||||
the ones specified in the server configuration file.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.4.7 "Connect message"
|
||||
|
||||
- DIE
|
||||
DIE [<message>]
|
||||
.
|
||||
Instructs the server to shut down.
|
||||
.
|
||||
The optional (and non-standard) <message> text is sent to each client
|
||||
connected to this server before all connections are closed.
|
||||
.
|
||||
To use this command, the user must be an IRC Operator.
|
||||
|
||||
References:
|
||||
- RFC 2812, 4.3 "Die message"
|
||||
|
||||
- DISCONNECT
|
||||
DISCONNECT <server>
|
||||
.
|
||||
Disconnect and disable a locally linked server.
|
||||
.
|
||||
To use this command, the user must be an IRC Operator.
|
||||
|
||||
References:
|
||||
- This command is not specified in the IRC RFCs, it is an extension
|
||||
of ngIRCd.
|
||||
|
||||
- GLINE
|
||||
GLINE <nick!user@hostmask> [<timeout> :<reason>]
|
||||
.
|
||||
This command provides timed G-Lines (network-wide bans).
|
||||
.
|
||||
If a client matches a G-Line, it cannot connect to any server on
|
||||
the IRC network for <timeout> seconds. When <timeout> is 0, it make
|
||||
the G-Line permanent.
|
||||
.
|
||||
If no <timeout> and no <reason> is given, the G-Line is removed.
|
||||
.
|
||||
To use this command, the user must be an IRC Operator.
|
||||
.
|
||||
"STATS g" can be used to list all currently active G-Lines.
|
||||
|
||||
References:
|
||||
- This command is not specified in the IRC RFCs, it is an extension
|
||||
of ngIRCd.
|
||||
|
||||
- KILL
|
||||
KILL <nickname> <reason>
|
||||
.
|
||||
Forcibly remove all users with a given <nickname> from the IRC
|
||||
network and display the given <reason> to them.
|
||||
.
|
||||
This command is used internally between servers, too, for example
|
||||
to disconnect duplicate <nickname>'s after a "net split".
|
||||
.
|
||||
To use this command, the user must be an IRC Operator.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.7.1 "Kill message"
|
||||
|
||||
- KLINE
|
||||
KLINE <nick!user@hostmask> [<timeout> :<reason>]
|
||||
.
|
||||
This command provides timed K-Lines (server-local bans).
|
||||
.
|
||||
If a client matches a K-Line, it cannot connect to this server for
|
||||
<timeout> seconds. When <timeout> is 0, it makes the K-Line permanent.
|
||||
.
|
||||
If no <timeout> and no <reason> is given, the K-Line is removed.
|
||||
.
|
||||
To use this command, the user must be an IRC Operator.
|
||||
.
|
||||
"STATS k" can be used to list all currently active K-Lines.
|
||||
|
||||
References:
|
||||
- This command is not specified in the IRC RFCs, it is an extension
|
||||
of ngIRCd.
|
||||
|
||||
- OPER
|
||||
OPER <name> <password>
|
||||
.
|
||||
Authenticates a user named <name> as an IRC operator on the current
|
||||
server/network.
|
||||
.
|
||||
This operator <name> must be configured in the server configuration.
|
||||
.
|
||||
Please note that <name> is NOT related to a nickname at all!
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.1.4 "Oper message"
|
||||
|
||||
- REHASH
|
||||
REHASH
|
||||
.
|
||||
Causes the server to re-read and re-process its configuration file(s).
|
||||
.
|
||||
While rehashing, no new connections are accepted, but all already
|
||||
established connections stay connected.
|
||||
.
|
||||
To use this command, the user must be an IRC Operator.
|
||||
|
||||
References:
|
||||
- RFC 2812, 4.2 "Rehash message"
|
||||
|
||||
- RESTART
|
||||
RESTART
|
||||
.
|
||||
Restart the server.
|
||||
.
|
||||
While restarting, all connections are reset and no new connections
|
||||
are accepted.
|
||||
.
|
||||
To use this command, the user must be an IRC Operator.
|
||||
|
||||
References:
|
||||
- RFC 2812, 4.4 "Restart message"
|
||||
|
||||
- WALLOPS
|
||||
WALLOPS <message>
|
||||
.
|
||||
Sends <message> to all users with user mode "+w".
|
||||
.
|
||||
To use this command, the user must be an IRC Operator.
|
||||
|
||||
References:
|
||||
- RFC 2812, 4.7 "Operwall message"
|
||||
|
||||
IRC Service Commands
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- SERVICE
|
||||
SERVICE <name> <reserved1> <distribution> <type> <reserved2> <info>
|
||||
SERVICE <name> <servertoken> <distribution> {<type>|+<modes>} <hops> <info>
|
||||
.
|
||||
Register a new service in the network.
|
||||
.
|
||||
The first form is used by directly linked services and isn't supported
|
||||
by ngIRCd at the moment. The second form announces services connected
|
||||
to remote "pseudo-servers" ("services hubs").
|
||||
.
|
||||
The <distribution> and <type> parameters are ignored by ngIRCd.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.1.6 "Service message"
|
||||
- RFC 2813, 4.1.4 "Service message"
|
||||
|
||||
- SERVLIST
|
||||
SERVLIST [<mask> [<type>]]
|
||||
.
|
||||
List all IRC services currently registered in the network.
|
||||
.
|
||||
The optional <mask> and <type> parameters can be used to limit the
|
||||
listing to services matching the <mask> and that are of type <type>.
|
||||
.
|
||||
Please note that ngIRCd doesn't use any service types at the moment
|
||||
and therefore all services are of type "0".
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.5.1 "Servlist message"
|
||||
|
||||
- SQUERY
|
||||
SQUERY <target>[,<target>[,...]] <message>
|
||||
.
|
||||
Send a <message> to a given <target> IRC service, and report all
|
||||
errors.
|
||||
.
|
||||
The "SQUERY" command exactly behaves like the "PRIVMSG" command, but
|
||||
enforces that the <target> of the <message> is an IRC service.
|
||||
Please see the help text of the "PRIVMSG" command for a detailed
|
||||
description of the parameters!
|
||||
.
|
||||
If a user wants to interact with IRC services, he should use "SQUERY"
|
||||
instead of "PRIVMSG" or "NOTICE": only "SQUERY makes sure that no
|
||||
regular user, which uses the nickname of an IRC service, receives
|
||||
the command in error, for example during a "net split"!
|
||||
|
||||
References:
|
||||
- RFC 2812, 2.3.1 "Message format in Augmented BNF"
|
||||
- RFC 2812, 3.3 "Sending messages"
|
||||
- RFC 2812, 3.3.2 "Notice"
|
||||
|
||||
- SVSNICK
|
||||
SVSNICK <oldnick> <newnick>
|
||||
.
|
||||
Forcefully change foreign user nicknames. This command is allowed
|
||||
for servers only.
|
||||
.
|
||||
The "SVSNICK" command is forwarded to the server to which the user
|
||||
with nickname <oldnick> is connected to, which in turn generates a
|
||||
regular "NICK" command that then is sent to the client, so no special
|
||||
support in the client software is required.
|
||||
|
||||
References:
|
||||
- ngIRCd GIT commit e3f300d3231f
|
||||
|
||||
|
||||
Server Protocol Commands
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- CHANINFO
|
||||
CHANINFO <channel> +<modes> [[<key> <limit>] <topic>]
|
||||
.
|
||||
CHANINFO is used by servers to inform each other about a channel:
|
||||
its modes, channel key, user limits and its topic.
|
||||
.
|
||||
Note: even when <modes> don't include "k" (key) or "l" (limit), both
|
||||
parameters must be given when used; use "*" for "no key" and 0 for
|
||||
"no limit" for the unused parameter in this case.
|
||||
.
|
||||
The CHANINFO command is allowed on server-links only.
|
||||
|
||||
References:
|
||||
- IRC+, <http://ngircd.barton.de/doc/Protocol.txt>
|
||||
- IRC+, doc/Protocol.txt
|
||||
|
||||
- ERROR
|
||||
ERROR [<message> [<> [...]]]
|
||||
.
|
||||
Inform a client or a server about an error condition. The first
|
||||
parameter, if given, is logged by the server receiving the message,
|
||||
all other parameters are silently ignored.
|
||||
.
|
||||
This command is silently ignored on non-server and non-service links
|
||||
and shouldn't be used by regular IRC clients.
|
||||
.
|
||||
The ERROR message is also sent before terminating a regular client
|
||||
connection.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.7.4 "Error message"
|
||||
|
||||
- METADATA
|
||||
METADATA <target> <key> <value>
|
||||
.
|
||||
The METADATA command is used on server-links to update "metadata"
|
||||
information of clients, like the hostname, the info text ("real name"),
|
||||
or the user name.
|
||||
.
|
||||
The METADATA command is allowed on server-links only.
|
||||
|
||||
References:
|
||||
- IRC+, <http://ngircd.barton.de/doc/Protocol.txt>
|
||||
- IRC+, doc/Protocol.txt
|
||||
|
||||
- NJOIN
|
||||
NJOIN <channel> [<mode>]<nick>[,[<mode>]<nick>[,...]]
|
||||
.
|
||||
The NJOIN command is used on server-links to add users with <nick>
|
||||
and <mode> to a <channel> while peering.
|
||||
.
|
||||
The NJOIN command is allowed on server-links only.
|
||||
|
||||
References:
|
||||
- RFC 2813, 4.2.2 "Njoin message"
|
||||
|
||||
- SERVER
|
||||
SERVER <servername> <info>
|
||||
SERVER <servername> <hopcount> <info>
|
||||
SERVER <servername> <hopcount> <token> <info>
|
||||
.
|
||||
The first form registers the local connection as a new server in the
|
||||
network, the second (RFC 1459) and third (RFC 2812) form announce a
|
||||
new remote server in the network.
|
||||
.
|
||||
The SERVER command is allowed on unregistered or server-links only.
|
||||
|
||||
References:
|
||||
- RFC 1459, 4.1.4 "Server message"
|
||||
- RFC 2813, 4.1.2 "Server message"
|
||||
|
||||
- SQUIT
|
||||
SQUIT <server> <comment>
|
||||
.
|
||||
Disconnects an IRC Server from the network.
|
||||
.
|
||||
This command is used on server-links, but can be used by IRC Operators
|
||||
to forcefully disconnect servers from the network, too.
|
||||
|
||||
References:
|
||||
- RFC 2812, 3.1.8 "Squit"
|
||||
- RFC 2813, 4.1.6 "Server quit message"
|
||||
|
||||
Dummy Commands
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
- SUMMON
|
||||
SUMMON <user> [<target> [<channel>]]
|
||||
.
|
||||
This command was intended to call people into IRC who are directly
|
||||
connected to the terminal console of the IRC server -- but is
|
||||
deprecated today. Therefore ngIRCd doesn't really implement this
|
||||
command and always returns an error message, regardless of the
|
||||
parameters given.
|
||||
|
||||
References:
|
||||
- RFC 2812, 4.5 "Summon message"
|
||||
|
||||
- USERS
|
||||
USERS [<target>]
|
||||
.
|
||||
This command was intended to list users directly logged in into the
|
||||
console of the IRC server -- but is deprecated today. Therefore ngIRCd
|
||||
doesn't really implement this command and always returns an error
|
||||
message, regardless of the parameters given.
|
||||
|
||||
References:
|
||||
- RFC 2812, 4.6 "Users"
|
||||
|
||||
- GET
|
||||
GET [...]
|
||||
.
|
||||
Fake HTTP GET command. When received, the connection is shut down
|
||||
immediately again to protect against crazy web browsers ...
|
||||
|
||||
References:
|
||||
- ngIRCd GIT commit 33e8c2480649
|
||||
|
||||
- POST
|
||||
POST [...]
|
||||
.
|
||||
Fake HTTP POST command. When received, the connection is shut down
|
||||
immediately again to protect against crazy web browsers ...
|
||||
|
||||
References:
|
||||
- ngIRCd GIT commit 33e8c2480649
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2011 Alexander Barton and Contributors.
|
||||
(c)2001-2015 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -15,7 +15,7 @@ get an idea of how to do it the best :-)
|
||||
- Use GIT
|
||||
|
||||
The source code of ngIRCd is maintained using GIT, see doc/GIT.txt. So if
|
||||
remotely possible, use GIT for your work, too. It makes your and our lifes
|
||||
remotely possible, use GIT for your work, too. It makes your and our lives
|
||||
much easier ;-)
|
||||
|
||||
- Don't forget to include documentation
|
||||
@@ -52,3 +52,9 @@ get an idea of how to do it the best :-)
|
||||
|
||||
And this is open source, your work must not be 100% finished and perfect,
|
||||
work in progress is interesting, too: "release early, release often"!
|
||||
|
||||
- Use GitHub to create "Pull Requests"
|
||||
|
||||
ngIRCd is hosted on GitHub (<https://github.com/ngircd>), so please use the
|
||||
tools available there and open issues (comment!) and create pull requests!
|
||||
See <https://help.github.com/articles/using-pull-requests/> for details.
|
||||
|
27
doc/FAQ.txt
27
doc/FAQ.txt
@@ -64,11 +64,19 @@ A: ngIRCd does not write its own log file. Instead, ngIRCd uses syslog(3).
|
||||
|
||||
Q: I cannot connect to remote peers when I use the chroot option, the
|
||||
following is logged: "Can't resolve example.com: unknown error!".
|
||||
A: see next question blow ...
|
||||
|
||||
Q: When running ngIRCd inside a chroot, no IP addresses can be translated
|
||||
in DNS names, errors like "Name or service not known" are logged.
|
||||
A: On Linux/glibc with chroot enabled you need to put some libraries inside
|
||||
the chroot as well, notably libnss_dns; maybe others. Unfortunately, even
|
||||
linking ngIRCd statically does not help this. The only known workaround
|
||||
is to either disable chroot support or to link against dietlibc instead
|
||||
of glibc. (tnx to Sebastian Siewior)
|
||||
linking ngIRCd statically does not help this. So you can either copy
|
||||
all the required files into the chroot directory:
|
||||
$ mkdir -p ./chroot/etc ./chroot/lib
|
||||
$ cp -a /etc/hosts /etc/resolv.conf /etc/nsswitch.conf ./chroot/etc/
|
||||
$ cp -a /lib/libresolv* /lib/libnss_* ./chroot/lib/
|
||||
Or you can try to link ngIRCd against an other C library (like dietlibc)
|
||||
that doesn't depend on NSS modules and/or these files.
|
||||
|
||||
Q: I have added an [Oper] section, how do i log on as IRC operator?
|
||||
A: You can use the /OPER command in your IRC client to become an IRC operator.
|
||||
@@ -81,16 +89,21 @@ A: You need to set 'OperCanUseMode = yes' in ngircd.conf, then IRC operators
|
||||
can use the MODE command for changing modes even when they are not joined
|
||||
to the specific channel.
|
||||
|
||||
Q: How can I "auto-op" users in channels?
|
||||
A: ngIRCd can't do this: you would have to use some "IRC Services", like
|
||||
Atheme (<http://atheme.net/atheme.html>) or Anope (<http://www.anope.org>).
|
||||
See "doc/Services.txt" for setup instructions.
|
||||
|
||||
|
||||
IV. Bugs!?
|
||||
~~~~~~~~~~
|
||||
|
||||
Q: Is there a list of known bugs and desired feature enhancements?
|
||||
A: Yes. Have a look at the bug tracking system (Bugzilla) for ngIRCd located
|
||||
at <http://ngircd.barton.de/bugzilla/index.cgi>. There you can file bug
|
||||
A: Yes. Have a look at the bug tracking system (GitHub issues) for ngIRCd located
|
||||
at <https://github.com/ngircd/ngircd/issues>. There you can file bug
|
||||
reports and feature requests as well as search the bug database.
|
||||
|
||||
Q: What should I do if I found a bug?
|
||||
A: Please file a bug report at <http://ngircd.barton.de/bugzilla/index.cgi>!
|
||||
The author of the particular component will be notified automagically :-)
|
||||
A: Please file a bug report at <https://github.com/ngircd/ngircd/issues/new>!
|
||||
The author will be notified automagically :-)
|
||||
|
||||
|
65
doc/GIT.txt
65
doc/GIT.txt
@@ -1,65 +0,0 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2011 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- GIT.txt --
|
||||
|
||||
|
||||
The source code of ngIRCd is maintained using GIT, an distributed version
|
||||
control system. Homepage including documentation: <http://git-scm.com/>.
|
||||
|
||||
|
||||
I. Viewing the source code online
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The ngIRCd "GITweb" interface allows you to browse the GIT repository and
|
||||
to see all individual files, tags, branches, commits etc.:
|
||||
|
||||
<http://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git>
|
||||
|
||||
|
||||
II. Getting the source code
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To access (copy, clone) the source tree repository anonymously, run:
|
||||
|
||||
$ git clone git://ngircd.barton.de/ngircd.git
|
||||
|
||||
Thereby a new folder "ngircd" will be created containing all the individual
|
||||
source files.
|
||||
|
||||
The newly created directory ("ngircd") is the "working directory", all
|
||||
GIT commands will be executed from within this directory in the future.
|
||||
|
||||
Please note: When checking out a fresh copy of ngIRCd using GIT, the
|
||||
configure script doesn't exist; you have to run the autogen.sh shell script
|
||||
(which is included in the source tree) to generate it. This requires you to
|
||||
have GNU automake and GNU autoconf installed on your system. Please see the
|
||||
file INSTALL for details!
|
||||
|
||||
To update the local GIT repository:
|
||||
|
||||
$ git pull
|
||||
|
||||
This retrieves all changes and merges them into the current branch.
|
||||
|
||||
|
||||
III. Contributing
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
Patches should be sent to the ngircd mailing list. List homepage:
|
||||
http://arthur.barton.de/mailman/listinfo/ngircd-ml
|
||||
|
||||
If you do not want to send them to the list, you can also mail them
|
||||
to Alex Barton, <alex@barton.de>.
|
||||
|
||||
|
||||
IV. Write Access
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
If you want to contribute a couple of patches and write access to the GIT
|
||||
repository would be handy, please contact Alex Barton, <alex@barton.de>.
|
@@ -1,9 +1,8 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2010 Alexander Barton,
|
||||
alex@barton.de, http://www.barton.de/
|
||||
|
||||
(c)2001-2020 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -36,18 +35,27 @@ up-to-date (e.g. using ./autogen.sh) before generating the archives!
|
||||
II. How to prepare a new ngIRCd release?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
a) Make sure the source tree is in a releasable state ;-)
|
||||
|
||||
b) Make sure you have working versions of GNU autoconf and GNU automake
|
||||
a) Make sure you have working versions of GNU autoconf and GNU automake
|
||||
installed on the system you use for generating the release:
|
||||
as of October 2010 we are using GNU autoconf 2.61 and GNU automake 1.10.1
|
||||
as of May 2020 we are using GNU autoconf 2.69 and GNU automake 1.11.6
|
||||
which seem to work just fine.
|
||||
NOTE: new releases of GNU automake DO NOT work, as they lack support for
|
||||
the "ansi2knr" wrapper and "de-ANSI-fication" support!
|
||||
|
||||
b) Make sure the source tree is in a releasable state ;-)
|
||||
- Are all branches & patches merged? Check GitHub issues, pull requests
|
||||
and milestones!
|
||||
- Run as many tests as you can!
|
||||
- Is the AUTHORS file up to date? This command may be helpful:
|
||||
"( grep '>$' AUTHORS; git shortlog -se | cut -c8- ) | grep -Ev \
|
||||
'(alex@barton.de|fw@strlen.de)' | LC_ALL=de_DE.UTF-8 sort -u"
|
||||
|
||||
c) Update the files describing the new release:
|
||||
- ChangeLog
|
||||
- NEWS
|
||||
|
||||
d) Update the version numbers in the following files:
|
||||
- contrib/de.barton.ngircd.metainfo.xml
|
||||
- contrib/ngircd.spec
|
||||
|
||||
e) Generate a new Debian change log entry in the following file, e.g. using
|
||||
@@ -65,13 +73,16 @@ h) Run "./autogen.sh" to update the ./configure script with the correct
|
||||
|
||||
i) Run "./configure" to rebuild all generated Makefiles.
|
||||
|
||||
j) Run "make distcheck" to generate the distribution archives.
|
||||
j) Run "make distcheck" (and "make dist-tarZ dist-xz") to generate all of the
|
||||
distribution archives.
|
||||
|
||||
k) Sign the distribution archive(s) using GnuPG: "gpg -b <archivefile>"
|
||||
|
||||
l) Upload and distribute the newly generated ngIRCd release archive(s)
|
||||
and GnuPG signatures.
|
||||
and GnuPG signatures (to the website, its mirrors, and GitHub).
|
||||
|
||||
m) Write an announcement to the mailing list, freshmeat, Twitter, ...
|
||||
m) Update the ngIRCd website and its mirrors!
|
||||
|
||||
n) Relax :-)
|
||||
n) Write an announcement to the mailing list, Twitter, ...
|
||||
|
||||
o) Relax :-)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2020 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# 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
|
||||
@@ -10,21 +10,36 @@
|
||||
#
|
||||
|
||||
.tmpl:
|
||||
sed \
|
||||
-e s@:ETCDIR:@${sysconfdir}@ \
|
||||
$(AM_V_GEN)sed \
|
||||
-e "s@:ETCDIR:@${sysconfdir}@" \
|
||||
-e "s@:DOCDIR:@${docdir}@" \
|
||||
<$< >$@
|
||||
|
||||
SUFFIXES = .tmpl
|
||||
|
||||
static_docs = Bopm.txt FAQ.txt GIT.txt HowToRelease.txt Modes.txt PAM.txt \
|
||||
Platforms.txt Protocol.txt README-AUX.txt README-BeOS.txt \
|
||||
README-Interix.txt RFC.txt SSL.txt Services.txt
|
||||
static_docs = \
|
||||
Bopm.txt \
|
||||
Capabilities.txt \
|
||||
Commands.txt \
|
||||
Contributing.txt \
|
||||
FAQ.txt \
|
||||
HowToRelease.txt \
|
||||
Modes.txt \
|
||||
PAM.txt \
|
||||
Platforms.txt \
|
||||
Protocol.txt \
|
||||
README-AUX.txt \
|
||||
README-BeOS.txt \
|
||||
README-Interix.txt \
|
||||
RFC.txt \
|
||||
Services.txt \
|
||||
SSL.txt
|
||||
|
||||
doc_templates = sample-ngircd.conf.tmpl
|
||||
|
||||
generated_docs = sample-ngircd.conf
|
||||
|
||||
toplevel_docs = ../AUTHORS ../COPYING ../ChangeLog ../INSTALL ../NEWS ../README
|
||||
toplevel_docs = ../AUTHORS ../COPYING ../ChangeLog ../INSTALL.md ../NEWS ../README.md
|
||||
|
||||
SUBDIRS = src
|
||||
|
||||
@@ -38,11 +53,11 @@ maintainer-clean-local:
|
||||
all: $(generated_docs)
|
||||
|
||||
install-data-hook: $(static_docs) $(toplevel_docs) $(generated_docs)
|
||||
$(mkinstalldirs) $(DESTDIR)$(sysconfdir)
|
||||
if [ ! -f $(DESTDIR)$(sysconfdir)/ngircd.conf ]; then \
|
||||
$(INSTALL) -m 600 -c sample-ngircd.conf $(DESTDIR)$(sysconfdir)/ngircd.conf; \
|
||||
$(MKDIR_P) -m 755 $(DESTDIR)$(sysconfdir)
|
||||
@if [ ! -f $(DESTDIR)$(sysconfdir)/ngircd.conf ]; then \
|
||||
${MAKE} install-config; \
|
||||
fi
|
||||
$(mkinstalldirs) $(DESTDIR)$(docdir)
|
||||
$(MKDIR_P) -m 755 $(DESTDIR)$(docdir)
|
||||
for f in $(static_docs) $(toplevel_docs); do \
|
||||
$(INSTALL) -m 644 -c $(srcdir)/$$f $(DESTDIR)$(docdir)/; \
|
||||
done
|
||||
@@ -50,10 +65,30 @@ install-data-hook: $(static_docs) $(toplevel_docs) $(generated_docs)
|
||||
$(INSTALL) -m 644 -c $$f $(DESTDIR)$(docdir)/; \
|
||||
done
|
||||
|
||||
install-config:
|
||||
$(INSTALL) -m 600 -c sample-ngircd.conf $(DESTDIR)$(sysconfdir)/ngircd.conf
|
||||
@echo; \
|
||||
echo " ** NOTE: Installed sample configuration file:"; \
|
||||
echo " ** \"$(DESTDIR)$(sysconfdir)/ngircd.conf\""; \
|
||||
echo
|
||||
|
||||
uninstall-hook:
|
||||
rm -rf $(DESTDIR)$(docdir)
|
||||
@if cmp --silent sample-ngircd.conf $(DESTDIR)$(sysconfdir)/ngircd.conf; then \
|
||||
${MAKE} uninstall-config; \
|
||||
else \
|
||||
echo; \
|
||||
echo " ** NOTE: Not uninstalling changed configuration file:"; \
|
||||
echo " ** \"$(DESTDIR)$(sysconfdir)/ngircd.conf\""; \
|
||||
echo; \
|
||||
fi
|
||||
|
||||
uninstall-config:
|
||||
rm -f $(DESTDIR)$(sysconfdir)/ngircd.conf
|
||||
|
||||
srcdoc:
|
||||
make -C src srcdoc
|
||||
${MAKE} -C src srcdoc
|
||||
|
||||
.PHONY: install-config uninstall-config srcdoc
|
||||
|
||||
# -eof-
|
||||
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2011 Alexander Barton and Contributors.
|
||||
(c)2001-2015 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -22,10 +22,15 @@ channels he is using at the moment.
|
||||
mode since description
|
||||
|
||||
a 0.3.0 User is away.
|
||||
b 20 User blocks private messages and notices.
|
||||
B 20 User is flagged as a "bot".
|
||||
c 17 IRC operator wants to receive connect/disconnect NOTICEs.
|
||||
C 19 Only users that share a channel are allowed to send messages.
|
||||
F 22 Relaxed flood protection (only settable by IRC Operators).
|
||||
i 0.0.1 User is "invisible".
|
||||
I 23 No channels are shown on WHOIS (IRC Ops can always see those).
|
||||
o 0.0.1 User is IRC operator.
|
||||
q 20 User is protected, can not be kicked from a channel.
|
||||
r 0.0.1 User is restricted.
|
||||
R (1) 19 User is registered (e.g. by NickServ).
|
||||
s 0.4.0 User wants to receive server notices.
|
||||
@@ -43,18 +48,23 @@ users to lists (e.g. "invite list", "ban list"), others have parameters
|
||||
mode since description
|
||||
|
||||
b 0.5.0 Add/remove a host mask to the ban list.
|
||||
e 19 Add/remove a host mask to the exception list.
|
||||
i 0.5.0 Channel is "invite only".
|
||||
I 0.5.0 Add/remove a host mask to the invite list.
|
||||
k 0.6.0 Channel has a "key" (a password).
|
||||
l 0.6.0 Channel has a user limit.
|
||||
m 0.3.0 Channel is moderated, only "voiced" users can send messages.
|
||||
M 20 Only registered users (and IRC Ops) can send messages.
|
||||
n 0.3.0 Channel doesn't allow messages of users not being members.
|
||||
N 23 Users can't change their nickname while on this channel.
|
||||
O 18 Only IRC operators are allowed to join this channel.
|
||||
P 0.5.0 Channel is "persistent".
|
||||
Q 20 Nobody can be kicked from the channel.
|
||||
r (1) 19 Channel is "registered" (e.g. by ChanServ).
|
||||
R 19 Only registered users are allowed to join this channel.
|
||||
s 0.9.0 Channel is "secret".
|
||||
t 0.3.0 Only ChanOps are allowed to modify the channel topic.
|
||||
V 20 Channel doesn't allow invites.
|
||||
z 16 Only users connected via SSL are allowed to join the channel.
|
||||
|
||||
III. Channel User Modes
|
||||
@@ -65,12 +75,21 @@ channel of which he is a member.
|
||||
|
||||
mode since description
|
||||
|
||||
q 20 User is channel owner. This mode can only be set by an IRC
|
||||
service, other owner or IRC operator. Channel owners can
|
||||
promote other users to all levels: q, a, o, h, v. Prefix: "~".
|
||||
a 20 User is channel admin and can promote other users to v, h, o.
|
||||
Prefix: "&".
|
||||
o 0.2.0 User is channel operator and can op/kick/... other members.
|
||||
Prefix: "@".
|
||||
h 20 User is half op and can set channel modes imntvIbek and kick
|
||||
voiced and normal users. Prefix: "%".
|
||||
v 0.2.0 User is "voiced" and can speak even if channel is moderated.
|
||||
Prefix: "+".
|
||||
|
||||
|
||||
Notes
|
||||
~~~~~
|
||||
|
||||
(1) This mode is not set by ngIRCd itself but by services. ngIRCd handles
|
||||
the mode transparently and possibly adjusts its behaviour.
|
||||
the mode transparently and possibly adjusts its behavior.
|
||||
|
19
doc/PAM.txt
19
doc/PAM.txt
@@ -1,9 +1,8 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2010 Alexander Barton,
|
||||
alex@barton.de, http://www.barton.de/
|
||||
|
||||
(c)2001-2013 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -27,6 +26,10 @@ A very simple -- and quite useless ;-) -- example would be:
|
||||
Here the "pam_debug" module will be called each time a client connects to
|
||||
the ngIRCd and has sent its PASS, NICK, and USER commands.
|
||||
|
||||
The PAM library used by the ngIRCd daemon must be able to access its
|
||||
configuration file, so don't forget to check permissions and run something
|
||||
like this: "chmod 644 /etc/pam.d/ngircd".
|
||||
|
||||
Please note ONE VERY IMPORTANT THING:
|
||||
|
||||
All the PAM modules are executed with the privileges of the user ngIRCd
|
||||
@@ -34,3 +37,13 @@ is running as. Therefore a lot of PAM modules aren't working as expected,
|
||||
because they need root privileges ("pam_unix", for example)!
|
||||
Only PAM modules not(!) requiring root privileges (such as "pam_pgsql",
|
||||
"pam_mysql", "pam_opendirectory" ...) can be used in conjunction with ngIRCd.
|
||||
|
||||
More Examples:
|
||||
|
||||
* Use an own "password file" for ngIRCd:
|
||||
|
||||
Note: you can use the htpasswd(1) utility of Apache to manage password
|
||||
files used by pam_pwdfile, see "man htpasswd"!
|
||||
|
||||
/etc/pam.d/ngircd:
|
||||
auth required pam_pwdfile.so pwdfile=/etc/ngircd/ngircd.passwd
|
||||
|
@@ -2,90 +2,147 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2011 Alexander Barton and Contributors.
|
||||
(c)2001-2020 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- Platforms.txt --
|
||||
|
||||
|
||||
This file lists the status of all platforms on which the ngIRCd has been
|
||||
tested. Included is the date and version of the last "official" test and
|
||||
the name of the tester/maintainer.
|
||||
This file lists the status of all platforms on which ngIRCd has been tested.
|
||||
Included is the date and version of the last test and the name of the tester
|
||||
or maintainer.
|
||||
|
||||
If you successfully compiled and tested ngIRCd on a platform that isn't
|
||||
listed here, please contact Alexander Barton, <alex@barton.de>, so that this
|
||||
list can be updated. Thanks for your help!
|
||||
If you successfully compiled and tested ngIRCd on a platform that isn't listed
|
||||
here, please write to the mailing list so that this list can be updated. The
|
||||
script "./contrib/platformtest.sh" should output a summary that is suitable
|
||||
for inclusion here. Thanks for your help!
|
||||
|
||||
|
||||
the executable works ("runs") as expected --+
|
||||
tests run successfully ("make check") --+ |
|
||||
ngIRCd compiles ("make") --+ | |
|
||||
./configure works --+ | | |
|
||||
| | | |
|
||||
Platform Compiler ngIRCd Date Tester C M T R See
|
||||
--------------------------- ------------ ---------- -------- ------ - - - - ---
|
||||
alpha/unknown/netbsd3.0 gcc 3.3.3 CVSHEAD 06-05-07 fw Y Y Y Y (3)
|
||||
hppa/unknown/openbsd3.5 gcc 2.95.3 CVSHEAD 04-05-25 alex Y Y Y Y
|
||||
hppa1.1/unknown/linux-gnu gcc 3.3.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
hppa2.0/unknown/linux-gnu gcc 3.3.5 13~rc1 08-12-02 alex Y Y Y Y
|
||||
hppa2.0w-hp-hpux11.11 gcc 4.2.3 14.1 09-07-22 goetz Y Y Y Y
|
||||
i386/apple/darwin9.7.0 gcc 4.0.1 14.1 09-08-04 alex Y Y Y Y (3)
|
||||
i386/apple/darwin10.7.0 gcc 4.2.1 18 11-07-05 alex Y Y Y Y (3)
|
||||
i386/apple/darwin11.0.0 gcc 4.2.1 18 11-07-02 alex Y Y Y Y (3)
|
||||
i386/pc/solaris2.9 gcc 3.2.2 CVSHEAD 04-02-24 alex Y Y Y Y
|
||||
i386/pc/solaris2.11 gcc 3.4.3 18 11-07-10 alex Y Y N Y (4)
|
||||
i386/pc/solaris2.11 gcc 4.2.3 18 11-08-17 goetz Y Y Y Y (4)
|
||||
i386/unknown/freebsd5.2.1 gcc 3.3.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
i386/unknown/freebsd6.2 gcc 3.4.6 18 11-07-10 alex Y Y Y Y (3)
|
||||
i386/unknown/freebsd7.3 gcc 4.2.1 18 11-07-10 alex Y Y Y Y (3)
|
||||
i686/unknown/gnu0.3 gcc 4.4.5 18 11-07-10 alex Y Y Y Y
|
||||
i686/unkn./kfreebsd7.2-gnu gcc 4.3.4 15 09-12-02 alex Y Y Y Y (3)
|
||||
i386/unknown/netbsdelf1.6.2 gcc 2.95.3 18 11-07-10 goetz Y Y Y Y
|
||||
i386/unknown/netbsdelf3.0.1 gcc 3.3.3 0.10.0-p1 06-08-30 alex Y Y Y Y (3)
|
||||
i386/unknown/netbsdelf4.0 gcc 4.1.2 18 11-07-10 alex Y Y Y Y (3)
|
||||
i386/unknown/netbsdelf5.0.2 gcc 4.1.3 18 11-07-10 alex Y Y Y Y (3)
|
||||
i386/unknown/openbsd3.9 gcc 3.3.5 0.10.0-p1 06-08-30 alex Y Y Y Y (3)
|
||||
i386/unknown/openbsd4.1 gcc 3.3.5 16 10-04-11 alex Y Y Y Y (3)
|
||||
i586/pc/interix3.5 gcc 3.3 18 11-07-10 alex Y Y N Y
|
||||
i686/pc/cygwin gcc 3.3.1 0.8.0 04-05-30 alex Y Y N Y
|
||||
i686/pc/linux-gnu gcc 2.95.4 0.8.0 04-05-30 alex Y Y Y Y (1)
|
||||
i686/pc/linux-gnu gcc 3.3.5 14.1 09-08-04 alex Y Y Y Y (1)
|
||||
i386/pc/linux-gnu gcc 4.1.2 13~rc1 08-12-05 alex Y Y Y Y (1)
|
||||
i686/pc/linux-gnu gcc 4.3.2 14.1 09-08-04 alex Y Y Y Y (1)
|
||||
m68k/apple/aux3.0.1 gcc 2.7.2 17 10-11-07 alex Y Y N Y
|
||||
m68k/apple/aux3.0.1 Orig. A/UX 17 10-11-07 alex Y Y N Y (2)
|
||||
m68k/apple/aux3.1.1 gcc 2.7.2 18 11-07-02 alex Y Y N Y
|
||||
m68k/apple/aux3.1.1 Orig. A/UX 18 11-07-02 alex Y Y N Y (2)
|
||||
m68k/hp/hp-ux9.10 Orig. HPUX 0.7.x-CVS 03-04-30 goetz Y Y Y Y
|
||||
m88k/dg/dgux5.4R3.10 gcc 2.5.8 CVSHEAD 04-03-15 alex Y Y ? ?
|
||||
mipsel/unknown/linux-gnu gcc 4.1.2 18 11-07-05 goetz Y Y N Y (1)
|
||||
mipsel/unknown/linux-gnu gcc 4.4.5 18 11-07-30 goetz Y Y Y Y (1)
|
||||
powerpc/apple/darwin6.5 gcc 3.1 0.7.x-CVS 03-04-23 alex Y Y Y Y
|
||||
powerpc/apple/darwin7.9.0 gcc 3.3 CVSHEAD 06-05-07 fw Y Y Y Y (3)
|
||||
powerpc/apple/darwin8.11.0 gcc 4.0.1 18 11-07-02 goetz Y Y Y Y (3)
|
||||
powerpc/unknown/linux-gnu gcc 3.3.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
powerpc/unknown/openbsd3.6 gcc 2.95.3 0.10.0 06-10-08 alex Y Y N Y
|
||||
sparc/sun/solaris2.6 gcc 2.95.3 0.7.x-CVS 03-04-22 alex Y Y Y Y
|
||||
sparc/sun/solaris2.7 gcc 3.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
sparc/unkn./netbsdelf1.6.1 gcc 2.95.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
x86_64/unknown/freebsd8.1 gcc 4.2.1 18 11-07-10 alex Y Y Y Y (3)
|
||||
x86_64/unknown/linux-gnu gcc 4.4.5 18 11-07-02 alex Y Y Y Y (1)
|
||||
x86_64/unknown/openbsd4.7 gcc 3.3.5 18 11-07-10 alex Y Y Y Y (3)
|
||||
the executable works ("runs") as expected --+
|
||||
tests run successfully ("make check") --+ |
|
||||
ngIRCd compiles ("make") --+ | |
|
||||
./configure works --+ | | |
|
||||
| | | |
|
||||
Platform Compiler ngIRCd Date Tester C M T R *
|
||||
--------------------------- ------------ ---------- -------- -------- - - - - -
|
||||
alpha/unknown/netbsd3.0 gcc 3.3.3 CVSHEAD 06-05-07 fw Y Y Y Y 3
|
||||
armv6l/unk./linux-gnueabi gcc 4.7.2 20.2 13-03-08 goetz Y Y Y Y 5
|
||||
armv6l/unk./linux-gnueabihf gcc 4.6.3 21~rc2 13-10-26 pi Y Y Y Y 5
|
||||
armv7l/unk./linux-gnueabi gcc 4.4.3 19.1 12-04-29 goetz Y Y Y Y 5
|
||||
armv7l/unk./linux-gnueabihf gcc 4.6.3 22~rc1-3 14-10-10 alex Y Y Y Y 5
|
||||
armv7l/unk./linux-gnueabihf gcc 4.8.2 21.1 14-07-15 goetz Y Y Y Y 5
|
||||
armv7l/unk./linux-gnueabihf gcc 4.9.2 23 16-01-10 alex Y Y Y Y 5
|
||||
hppa/unknown/openbsd3.5 gcc 2.95.3 CVSHEAD 04-05-25 alex Y Y Y Y
|
||||
hppa/unknown/openbsd5.4 gcc 4.2.1 22~rc1-3 14-10-10 alex Y Y y Y 3
|
||||
hppa1.1/unknown/linux-gnu gcc 3.3.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
hppa2.0/unknown/linux-gnu gcc 3.3.5 13~rc1 08-12-02 alex Y Y Y Y
|
||||
hppa2.0w-hp-hpux11.11 gcc 4.2.3 14.1 09-07-22 goetz Y Y Y Y
|
||||
i386/apple/darwin9.7.0 gcc 4.0.1 14.1 09-08-04 alex Y Y Y Y 3
|
||||
i386/apple/darwin10.8.0 gcc 4.2.1 19 12-02-26 alex Y Y Y Y 3
|
||||
i386/apple/darwin11.3.0 gcc 4.2.1 19 12-02-26 alex Y Y Y Y 3
|
||||
i386/pc/linux-gnu gcc 4.1.2 13~rc1 08-12-05 alex Y Y Y Y 1
|
||||
i386/pc/linux-gnu gcc 4.4.5 22~rc1-3 14-10-10 alex Y Y Y Y 1
|
||||
i386/pc/minix clang 3.4 23 16-01-06 goetz Y Y N Y
|
||||
i386/pc/solaris2.9 gcc 3.2.2 CVSHEAD 04-02-24 alex Y Y Y Y
|
||||
i386/pc/solaris2.11 gcc 4.8.2 24 17-01-21 goetz Y Y Y Y 4
|
||||
i386/unknown/freebsd5.2.1 gcc 3.3.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
i386/unknown/freebsd6.2 gcc 3.4.6 20~rc1 12-11-13 alex Y Y Y Y 3
|
||||
i386/unknown/freebsd7.3 gcc 4.2.1 24~rc1-7 17-01-20 alex Y Y Y Y 3
|
||||
i386/unknown/netbsdelf1.5.2 egcs-1.1.2 21 13-11-25 goetz Y Y N Y
|
||||
i386/unknown/netbsdelf1.6.2 gcc 2.95.3 18 11-07-10 goetz Y Y Y Y
|
||||
i386/unknown/netbsdelf3.0.1 gcc 3.3.3 0.10.0-p1 06-08-30 alex Y Y Y Y 3
|
||||
i386/unknown/netbsdelf4.0 gcc 4.1.2 24~rc1-7 17-01-20 alex Y Y Y Y 3
|
||||
i386/unknown/netbsdelf5.0.2 gcc 4.1.3 19 12-02-26 alex Y Y Y Y 3
|
||||
i386/unknown/openbsd3.5 gcc 2.95.3 23 15-11-27 goetz Y Y y Y 3
|
||||
i386/unknown/openbsd3.9 gcc 3.3.5 0.10.0-p1 06-08-30 alex Y Y Y Y 3
|
||||
i386/unknown/openbsd4.1 gcc 3.3.5 16 10-04-11 alex Y Y Y Y 3
|
||||
i386/unknown/openbsd5.3 gcc 4.2.1 21 13-11-28 goetz Y Y Y Y 3
|
||||
i386/unknown/openbsd5.4 gcc 4.2.1 21 13-11-28 goetz Y Y Y Y 3
|
||||
i586/pc/haiku gcc 2.95.3 19.2~138 12-10-11 user Y Y N N
|
||||
i586/pc/interix3.5 gcc 3.3 23 16-01-29 alex Y Y N Y
|
||||
i686/pc/cygwin gcc 4.9.3 23 16-01-06 alex Y Y Y Y
|
||||
i686/pc/linux-gnu gcc 2.6.3 23 16-01-06 goetz Y Y y Y 1
|
||||
i686/pc/linux-gnu gcc 2.7.2.1 23 15-11-30 goetz Y Y N Y 1
|
||||
i686/pc/linux-gnu gcc 2.95.2 23 15-12-23 goetz Y Y Y Y 1
|
||||
i686/pc/linux-gnu gcc 2.95.4 0.8.0 04-05-30 alex Y Y Y Y 1
|
||||
i686/pc/linux-gnu gcc 3.3.5 14.1 09-08-04 alex Y Y Y Y 1
|
||||
i686/pc/linux-gnu gcc 4.3.2 14.1 09-08-04 alex Y Y Y Y 1
|
||||
i686/pc/minix gcc 4.4.6 21~rc2 13-10-27 alex Y Y N N
|
||||
i686/unknown/gnu0.3 gcc 4.4.5 19 12-02-29 alex Y Y Y Y
|
||||
i686/unknown/gnu0.5 gcc 4.9.1 22~rc1-3 14-10-11 alex Y Y Y Y
|
||||
i686/unkn./kfreebsd7.2-gnu gcc 4.3.4 15 09-12-02 alex Y Y Y Y 3
|
||||
m68k/apple/aux3.0.1 gcc 2.7.2 17 10-11-07 alex Y Y N Y
|
||||
m68k/apple/aux3.0.1 Orig. A/UX 17 10-11-07 alex Y Y N Y 2
|
||||
m68k/apple/aux3.1.1 gcc 2.7.2 19 12-02-26 alex Y Y N Y
|
||||
m68k/apple/aux3.1.1 Orig. A/UX 19 12-02-26 alex Y Y N Y 2
|
||||
m68k/hp/hp-ux9.10 Orig. HPUX 0.7.x-CVS 03-04-30 goetz Y Y Y Y
|
||||
m88k/dg/dgux5.4R3.10 gcc 2.5.8 CVSHEAD 04-03-15 alex Y Y ? ?
|
||||
mips/sgi/irix6.5 SGI 25 19-12-29 goetz Y Y ? ?
|
||||
mipsel/openwrt/linux-uclibc gcc 4.8 24~9-g619a 18-01-28 goetz - - - Y 6
|
||||
mipsel/unknown/linux-gnu gcc 4.1.2 18 11-07-05 goetz Y Y N Y 1
|
||||
mipsel/unknown/linux-gnu gcc 4.4.5 21 13-11-24 goetz Y Y Y Y 1
|
||||
mipsel/unknown/netbsd8.0 gcc 5.5.0 25 19-08-09 root Y Y y Y 3
|
||||
powerpc/apple/darwin6.8 gcc 3.1 21 14-01-03 goetz Y Y Y Y
|
||||
powerpc/apple/darwin7.9.0 gcc 3.3 22 15-03-22 goetz Y Y Y Y 3
|
||||
powerpc/apple/darwin8.11.0 gcc 4.0.1 25 19-11-24 goetz Y Y Y Y 3
|
||||
powerpc/apple/darwin9.8.0 gcc 4.0.1 21 14-01-04 goetz Y Y Y Y 3
|
||||
powerpc/unknown/linux-gnu gcc 3.3.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
powerpc/unknown/openbsd3.6 gcc 2.95.3 0.10.0 06-10-08 alex Y Y N Y
|
||||
sparc/sun/solaris2.6 gcc 2.95.3 0.7.x-CVS 03-04-22 alex Y Y Y Y
|
||||
sparc/sun/solaris2.7 gcc 3.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
sparc/unkn./netbsdelf1.6.1 gcc 2.95.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
sparc/unknown/openbsd5.5 gcc 4.2.1 21.1 14-05-03 goetz Y Y Y Y 3
|
||||
x86_64/apple/darwin10.8.0 gcc 4.2.1 21~rc2 13-10-30 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin12.3.0 gcc 4.2.1 20.2 13-04-01 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin13.0.0 A-clang 5.0 21 14-01-02 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin14.5.0 A-clang 6.1 23~rc1 15-09-06 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin15.6.0 A-clang 8.0 23~38-g455 16-11-04 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin16.5.0 A-clang 8.1 25~rc1-7-g 18-11-04 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin17.7.0 A-clang 10.0 25~rc1 18-11-04 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin18.2.0 A-clang 10.0 25~rc1-11 19-01-23 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin19.4.0 A-clang 11.0 26~rc1 20-05-10 alex Y Y Y Y 3
|
||||
x86_64/unknown/dragonfly3.4 gcc 4.7.2 21 13-11-12 goetz Y Y N Y 3
|
||||
x86_64/unkn./freebsd8.1-gnu gcc 4.4.5 19 12-02-26 alex Y Y Y Y 3
|
||||
x86_64/unknown/freebsd8.4 gcc 4.2.1 24~rc1-7 17-01-20 alex Y Y Y Y 3
|
||||
x86_64/unknown/freebsd9.2 gcc 4.2.1 22~rc1-3 14-10-10 alex Y Y Y Y 3
|
||||
x86_64/unknown/freebsd10.3 F-clang 3.4 24 17-01-20 goetz Y Y Y Y 3
|
||||
x86_64/unknown/freebsd11.0 F-clang 3.8 24 17-01-21 goetz Y Y Y Y 3
|
||||
x86_64/unknown/haiku gcc 7.3.0 25~rc1-11 19-01-06 alex Y Y N Y
|
||||
x86_64/unknown/linux-gnu clang 3.3 21 14-01-07 alex Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu clang 3.4 22~rc1-3 14-10-11 alex Y Y Y Y 1
|
||||
x86_64/pc/linux-gnu gcc 4.4.5 24~rc1-7 17-01-20 alex Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu gcc 4.7.2 23~rc1-3 15-11-15 alex Y Y Y Y 1
|
||||
x86_64/pc/linux-gnu gcc 4.8.4 24~rc1-7 17-01-20 alex Y Y Y Y 1
|
||||
x86_64/pc/linux-gnu gcc 4.9.2 24~rc1-7 17-01-20 alex Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu gcc 5.3.0 23 15-12-14 goetz Y Y Y Y 1
|
||||
x86_64/pc/linux-gnu [WSL] gcc 5.4.0 24 18-03-07 goetz Y Y y Y 7
|
||||
x86_64/pc/linux-gnu gcc 6.2.1 24~rc1-7 17-01-20 alex Y Y Y Y 1
|
||||
x86_64/pc/linux-gnu gcc 6.3.0 25~rc1-11 19-01-23 alex Y Y Y Y 1
|
||||
x86_64/pc/linux-gnu gcc 8.3.0 26~rc1 20-05-10 alex Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu icc 16 23 16-01-13 goetz Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu nwcc 0.8.2 21 13-12-01 goetz Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu Open64 21.1 14-03-27 goetz Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu Sun C 5.12 21.1 14-03-27 goetz Y Y Y Y 1
|
||||
x86_64/unknown/openbsd4.7 gcc 3.3.5 20~rc1 12-02-26 alex Y Y Y Y 3
|
||||
x86_64/unknown/openbsd4.8 gcc 4.2.1 22~rc1-3 14-10-10 alex Y Y y Y 3
|
||||
x86_64/unknown/openbsd5.1 gcc 4.2.1 21 13-12-28 alex Y Y Y Y 3
|
||||
x86_64/unknown/openbsd5.5 gcc 4.2.1 22~rc1-3 14-10-10 alex Y Y Y Y 3
|
||||
|
||||
|
||||
Notes
|
||||
~~~~~
|
||||
* Notes
|
||||
~~~~~~~
|
||||
|
||||
(1) */*/linux-gnu (Linux platforms):
|
||||
ngIRCd has been tested with various Linux distributions, such as SuSE,
|
||||
RedHat, Debian, and Gentoo using Kernels 2.2.x, 2.4.x and 2.6.x with
|
||||
various versions of the GNU C compiler (starting with 2.95.x and up to
|
||||
version 4.3.x). The eldest glibc used was glibc-2.0.7. ngIRCd compiled
|
||||
and run on all these systems without problems.
|
||||
Actual Linux kernels (2.6.x) and glibc's support the epoll() IO interface.
|
||||
ngIRCd has been tested with various Linux distributions, such as ArchLinux,
|
||||
Debian, Gentoo, Red Hat (Fedora) and SuSE using Linux kernels 2.2.x, 2.4.x,
|
||||
2.6.x, 3.x, 4.x and 5.x, with various versions of the GNU C compiler
|
||||
(starting with 2.95.x) and Clang. The eldest glibc used was glibc-2.0.7.
|
||||
ngIRCd compiled and ran on all of these systems successfully.
|
||||
Current Linux kernels (starting with 2.6.x) and glibc's support the more
|
||||
efficient epoll() IO interface, see (5) below.
|
||||
|
||||
(2) This compiler is an pre-ANSI C compiler, therefore the source code is
|
||||
(2) This compiler is a pre-ANSI C compiler (K&R), therefore the source code is
|
||||
automatically converted using the included ansi2knr tool while building.
|
||||
|
||||
(3) Using the kqueue() IO interface.
|
||||
@@ -93,3 +150,9 @@ Notes
|
||||
(4) Using the /dev/poll IO interface.
|
||||
|
||||
(5) Using the epoll() IO interface.
|
||||
|
||||
(6) ngIRCd has been cross-compiled with gcc 4.8 on Ubuntu x86-64 for
|
||||
MIPSEL Linux OpenWRT distribution (uclibc), for the target computer
|
||||
Vocore2, where the created binary ran well.
|
||||
|
||||
(7) This actually is Windows 10 running Windows Subsystem for Linux (WSL).
|
||||
|
@@ -1,9 +1,8 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2008 Alexander Barton,
|
||||
alex@barton.de, http://www.barton.de/
|
||||
|
||||
(c)2001-2019 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -27,6 +26,12 @@ clients are compatible with a server configured that way, some can't even
|
||||
connect at all! Therefore this option usually isn't desired for "normal
|
||||
server operation".
|
||||
|
||||
In addition, ngIRCd implements some "IRCv3" features. This includes:
|
||||
- IRCv3 Client Capability Negotiation
|
||||
- IRCv3.1 multi-prefix Extension
|
||||
- IRCv3.2 userhost-in-names Extension
|
||||
Please see the IRCv3 homepage for more information: <https://ircv3.net>.
|
||||
|
||||
|
||||
II. The IRC+ Protocol
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -82,11 +87,17 @@ The following <serverflags> are defined at the moment:
|
||||
- H: The server supports the "enhanced server handshake", see section II.2
|
||||
for a detailed description.
|
||||
|
||||
- M: Changing client "metadata" (hostname, real name, ...) using the
|
||||
METADATA command is supported.
|
||||
|
||||
- o: IRC operators are allowed to change channel- and channel-user-modes
|
||||
even if they aren't channel-operator of the affected channel.
|
||||
|
||||
- S: The server supports the SERVICE command (on this link).
|
||||
|
||||
- X: Server supports XOP channel modes (owner, admin, halfop) and supports
|
||||
these user prefixes in CHANINFO commands, for example.
|
||||
|
||||
- Z: Compressed server links are supported by the server.
|
||||
|
||||
Example for a complete <flags> string: "ngircd|0.7.5:CZ".
|
||||
@@ -134,7 +145,7 @@ protocol which allows at max 15 arguments per command).
|
||||
Please see <http://www.irc.org/tech_docs/005.html> for details.
|
||||
|
||||
The information exchanged using ISUPPORT can be used to detect configuration
|
||||
incompatibilities (different maximum nick name length, for example) and
|
||||
incompatibilities (different maximum nickname length, for example) and
|
||||
therefore to disconnect the peer prior to registering it in the network.
|
||||
|
||||
|
||||
@@ -171,7 +182,7 @@ channel mode). In this case <limit> should be "0".
|
||||
II.4 Update webchat/proxy client information
|
||||
|
||||
Command: WEBIRC
|
||||
Parameters: <password> <username> <hostname> <ip-address>
|
||||
Parameters: <password> <username> <hostname> <ip-address> [<ignored>]
|
||||
Used by: unregistered clients only
|
||||
|
||||
The WEBIRC command is used by some Web-to-IRC gateways to set the correct
|
||||
@@ -181,3 +192,74 @@ first command sent to the server, even before USER and NICK commands!
|
||||
The <password> must be set in the server configuration file to prevent
|
||||
unauthorized clients to fake their identity; it is an arbitrary string.
|
||||
|
||||
Optionally, a 5th parameter is accepted to comply with an IRCv3 extension,
|
||||
see <https://github.com/ircv3/ircv3-ideas/issues/12>, but ignored.
|
||||
|
||||
|
||||
II.5 Client character encoding conversion
|
||||
|
||||
Command: CHARCONV
|
||||
Parameters: <client-charset>
|
||||
Used by: registered clients
|
||||
Replies: RPL_IP_CHARCONV, ERR_IP_CHARCONV
|
||||
|
||||
A client can set its character set encoding using the CHARCONV command:
|
||||
after receiving such a command, the server translates all message data
|
||||
received from the client using the set <client-charset> to the server
|
||||
encoding (UTF-8), and all message data which is to be sent to the client
|
||||
from the server encoding (UTF-8) to <client-charset>.
|
||||
|
||||
The list of supported client character sets is implementation dependent.
|
||||
|
||||
If a client sets its <client-charset> to the server encoding (UTF-8),
|
||||
it disables all conversions; the connection behaves as if no CHARCONV
|
||||
command has been sent at all in this session.
|
||||
|
||||
|
||||
II.6 Update client "metadata"
|
||||
|
||||
Command: METADATA
|
||||
Parameters: <target> <key> <value>
|
||||
Used by: servers only
|
||||
|
||||
The METADATA command is used on server-links to update "metadata" information
|
||||
of clients, like the hostname, the info text ("real name"), or the user name.
|
||||
|
||||
The server updates its client database according to the received <key> and
|
||||
<value> parameters, and passes the METADATA command on to all the other
|
||||
servers in the network that support this command (see section II.1 "Register
|
||||
new server link", <serverflag> "M"), even if it doesn't support the given
|
||||
<key> itself: unknown <key> names are ignored silently!
|
||||
|
||||
The following <key> names are defined:
|
||||
|
||||
- "accountname": the account name of a client (can't be empty)
|
||||
- "certfp": the certificate fingerprint of a client (can't be empty)
|
||||
- "cloakhost": the cloaked hostname of a client
|
||||
- "host": the hostname of a client (can't be empty)
|
||||
- "info": info text ("real name") of a client
|
||||
- "user": the user name of a client (can't be empty)
|
||||
|
||||
|
||||
III. Numerics used by IRC+ Protocol
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The IRC+ protocol uses numerics in the range 800-899 which aren't used by
|
||||
RFC 2812 and hopefully don't clash with other implementations ...
|
||||
|
||||
Numerics 800-849 are used for status and success messages, and numerics
|
||||
850-899 are failure and error messages.
|
||||
|
||||
|
||||
III.1 IRC+ status and success numerics
|
||||
|
||||
801 - RPL_IP_CHARCONV
|
||||
%1 :Client encoding set"
|
||||
|
||||
%1 client character set
|
||||
|
||||
|
||||
III.2 IRC+ failure and error numerics
|
||||
|
||||
851 - ERR_IP_CHARCONV
|
||||
:Can't initialize client encoding
|
||||
|
@@ -22,7 +22,7 @@ The following software packages are needed:
|
||||
- GNU sed
|
||||
Source:
|
||||
http://www.rezepte-im-web.de/appleux/sed-3.02.tar.gz
|
||||
ftp://arthur.barton.de/pub/unix/aux/tools/sed-3.02.tar.gz
|
||||
http://arthur.barton.de/pub/unix/aux/tools/sed-3.02.tar.gz
|
||||
|
||||
A/UX comes with /bin/sed which isn't supporting all functions needed
|
||||
by GNU automake/autoconf.
|
||||
@@ -34,7 +34,7 @@ The following software packages are needed:
|
||||
- libUTIL.a
|
||||
Source:
|
||||
ftp://ftp.mayn.de/pub/really_old_stuff/apple/apple_unix/Sys_stuff/libUTIL-2.1.tar.gz>
|
||||
ftp://arthur.barton.de/pub/unix/aux/libraries/libUTIL-2.1.tar.gz
|
||||
http://arthur.barton.de/pub/unix/aux/libraries/libUTIL-2.1.tar.gz
|
||||
|
||||
This library contains functions that are common on other UNIX
|
||||
systems but not on A/UX e.g. memmove(), strerror() and strdup().
|
||||
@@ -50,7 +50,7 @@ A few hints in case of errors:
|
||||
(so 'configure' uses its own shell script) or use a fully functionable one.
|
||||
There's at least one binary "out there" causing problems. The one
|
||||
of the GNU fileutils works fine:
|
||||
ftp://arthur.barton.de/pub/unix/aux/tools/fileutils-4.0.tar.gz
|
||||
http://arthur.barton.de/pub/unix/aux/tools/fileutils-4.0.tar.gz
|
||||
|
||||
- The precompiled binary of the old 'bash' shouldn't be installed within
|
||||
/bin (better do this in /usr/local/bin) because 'configure' would
|
||||
|
@@ -1,12 +1,10 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
|
||||
(c)2001-2010 Alexander Barton,
|
||||
alex@barton.de, http://www.barton.de/
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2012 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- README-Interix.txt --
|
||||
|
||||
@@ -20,10 +18,13 @@ Windows Server 2003. SUA is supported on Windows Server 2003 R2, Windows
|
||||
Server 2008 & 2008 R2, Windows Vista, and Windows 7 -- so ngIRCd should be
|
||||
able to run on all of these platforms.
|
||||
|
||||
But please note that the poll() API function is not fully implemented by
|
||||
SFU/SUA and therefore can't be used by ngIRCd -- which normally would be
|
||||
the default. Please see <http://www.suacommunity.com/faqs.aspx> section
|
||||
4.25 for details:
|
||||
But please note that two things:
|
||||
|
||||
1. Don't use the poll() IO API
|
||||
|
||||
The poll() API function is not fully implemented by SFU/SUA and therefore
|
||||
can't be used by ngIRCd -- which normally would be the default. Please see
|
||||
<http://www.suacommunity.com/faqs.aspx> section 4.25 for details:
|
||||
|
||||
"If you do try to use the poll() API your program will block on the
|
||||
API call forever. You must direct your program to build using the
|
||||
@@ -35,3 +36,9 @@ So when running the ./configure script, you HAVE TO DISABLE poll() support:
|
||||
|
||||
ngIRCd then defaults to using the select() API function which works fine.
|
||||
|
||||
2. Use GNU make(1)
|
||||
|
||||
Starting with ngIRCd 18, our build system doesn't work with the default
|
||||
make(1) binary of Interix, you should use GNU make instead (tested with
|
||||
version 3.82 built from source).
|
||||
|
||||
|
13
doc/RFC.txt
13
doc/RFC.txt
@@ -1,9 +1,8 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2003 by Alexander Barton,
|
||||
alex@barton.de, http://www.barton.de/
|
||||
|
||||
(c)2001-2017 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -11,7 +10,8 @@
|
||||
|
||||
|
||||
The Internet Relay Chat (IRC) protocol is documented in these Request for
|
||||
Comments (RFC), which you can get e.g. via <http://www.faqs.org/>:
|
||||
Comments (RFCs), which you can get via <http://www.faqs.org/rfcs/> or
|
||||
<https://www.ietf.org/rfc.html> for example.
|
||||
|
||||
1459 Oikarinen, J. & D. Reed, "Internet Relay Chat Protocol",
|
||||
May 1993, [IRC].
|
||||
@@ -28,6 +28,5 @@ Comments (RFC), which you can get e.g. via <http://www.faqs.org/>:
|
||||
2813 Kalt, C., "Internet Relay Chat: Server Protocol",
|
||||
April 2000, [IRC-SERVER].
|
||||
|
||||
|
||||
--
|
||||
$Id: RFC.txt,v 1.6 2003/03/07 20:42:20 alex Exp $
|
||||
7194 Hartmann, R., "Default Port for Internet Relay Chat (IRC) via TLS/SSL",
|
||||
August 2014.
|
||||
|
@@ -9,16 +9,20 @@
|
||||
-- Services.txt --
|
||||
|
||||
|
||||
At the moment, ngIRCd doesn't implement a "special IRC services interface".
|
||||
But services acting as a "regular server" are supported, either using the IRC
|
||||
protocol defined in RFC 1459 or RFC 2812.
|
||||
ngIRCd doesn't implement a "special IRC services interface", but services
|
||||
acting as a "regular servers" ("pseudo servers") are supported, either
|
||||
using the IRC protocol as defined in RFC 1459 or RFC 2812.
|
||||
|
||||
Support for Services has been tested using "IRC Services" version 5.x by
|
||||
Andrew Church (<http://achurch.org/services/>), and a Anope 1.9 using a
|
||||
preliminary protocol module for ngIRCd (<http://www.anope.org/>).
|
||||
Support for Services has been tested using
|
||||
- Anope 1.9.8 or later (<http://www.anope.org/>)
|
||||
- Atheme 7.0.2 or later (<http://www.atheme.net>)
|
||||
- "IRC Services" 5.1.x by Andrew Church (<http://achurch.org/services/>)
|
||||
|
||||
This document describes setting up ngIRCd and these services.
|
||||
|
||||
Please let us know if you are successfully using other IRC service packages or
|
||||
which problems you encounter -- thanks!
|
||||
|
||||
|
||||
Setting up ngIRCd
|
||||
~~~~~~~~~~~~~~~~~
|
||||
@@ -30,6 +34,10 @@ services instead of regular IRC users.
|
||||
|
||||
Example:
|
||||
|
||||
[GLOBAL]
|
||||
Name = server.irc.net
|
||||
Ports = 6667
|
||||
|
||||
[SERVER]
|
||||
Name = services.irc.net
|
||||
MyPassword = 123abc
|
||||
@@ -37,16 +45,22 @@ Example:
|
||||
ServiceMask = *Serv
|
||||
|
||||
|
||||
Setting up Anope 1.9.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
Setting up Anope 1.9.x & 2.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Anope 1.9.4 (and above) can be used with ngIRCd using a preliminary "ngircd"
|
||||
protocol module contained in our contrib/Anope/ directory. Please see the
|
||||
file contrib/Anope/README for installation instructions!
|
||||
Anope 1.9.8 or later (<http://www.anope.org/>) can be used with ngIRCd using
|
||||
the "ngircd" protocol module.
|
||||
|
||||
After patching and installing Anope, at least the following configuration
|
||||
variables have to be adjusted in data/services.conf, in addition to all the
|
||||
settings marked as required:
|
||||
At least the following settings have to be tweaked, in addition to all the
|
||||
settings marked as required by Anope:
|
||||
|
||||
In conf/services.conf:
|
||||
|
||||
define
|
||||
{
|
||||
name = "services.host"
|
||||
value = "services.irc.net"
|
||||
}
|
||||
|
||||
uplink
|
||||
{
|
||||
@@ -55,12 +69,57 @@ settings marked as required:
|
||||
password = "123abc"
|
||||
}
|
||||
|
||||
serverinfo
|
||||
# Load ngIRCd protocol module
|
||||
module
|
||||
{
|
||||
name = "services.irc.net"
|
||||
type = "ngircd"
|
||||
name = "ngircd"
|
||||
}
|
||||
|
||||
networkinfo
|
||||
{
|
||||
# Must be set to the "MaxNickLength" setting of ngIRCd!
|
||||
nicklen = 9
|
||||
|
||||
# When not using "strict mode", which is the default:
|
||||
userlen = 20
|
||||
|
||||
chanlen = 50
|
||||
}
|
||||
|
||||
In conf/nickserv.conf:
|
||||
|
||||
module
|
||||
{
|
||||
name = "nickserv"
|
||||
|
||||
# not required if you are running ngIRCd with a higher nickname limit
|
||||
# ("MaxNickLength") than 11 characters, but REQUIRED by default!
|
||||
guestnickprefix = "G-"
|
||||
}
|
||||
|
||||
|
||||
Setting up Atheme 7.0.2 or later
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Atheme 7.0.2 or later (<http://www.atheme.net>) may be used with ngIRCd using
|
||||
the "ngircd" protocol module.
|
||||
|
||||
The following settings need to be in atheme.conf:
|
||||
|
||||
loadmodule "modules/protocol/ngircd";
|
||||
|
||||
serverinfo {
|
||||
name = "services.irc.net";
|
||||
}
|
||||
|
||||
uplink "server.irc.net" {
|
||||
password = "123abc";
|
||||
port = 6667;
|
||||
};
|
||||
|
||||
The documentation of Atheme can be found in the doc/ directory of the
|
||||
Atheme source distribution.
|
||||
|
||||
|
||||
Setting up IRC Services 5.1.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -72,7 +131,7 @@ Please note that versions up to and including 5.1.3 contain a bug that
|
||||
sometimes causes IRC Services to hang on startup. There are two workarounds:
|
||||
a) send the services process a HUP signal ("killall -HUP ircservices")
|
||||
b) apply this patch to the IRC Services source tree:
|
||||
<ftp://ngircd.barton.de/ngircd/contrib/IRCServices513-FlushBuffer.patch>
|
||||
<http://arthur.barton.de/pub/ngircd/contrib/IRCServices513-FlushBuffer.patch>
|
||||
|
||||
At least the following settings have to be tweaked, in addition to all the
|
||||
settings marked as required by IRC Services:
|
||||
@@ -91,7 +150,3 @@ In modules.conf:
|
||||
|
||||
The documentation of IRC Services can be found here:
|
||||
<http://www.ircservices.za.net/docs/>
|
||||
|
||||
|
||||
Please let us know if you are successfully using other IRC service packages or
|
||||
which problems you encounter, thanks!
|
||||
|
@@ -33,6 +33,10 @@
|
||||
;AdminInfo2 = Location
|
||||
;AdminEMail = admin@irc.server
|
||||
|
||||
# Text file which contains the ngIRCd help text. This file is required
|
||||
# to display help texts when using the "HELP <cmd>" command.
|
||||
;HelpFile = :DOCDIR:/Commands.txt
|
||||
|
||||
# Info text of the server. This will be shown by WHOIS and
|
||||
# LINKS requests for example.
|
||||
Info = Server Info Text
|
||||
@@ -47,9 +51,15 @@
|
||||
# be shown to all users connecting to the server:
|
||||
;MotdFile = :ETCDIR:/ngircd.motd
|
||||
|
||||
# A simple Phrase (<256 chars) if you don't want to use a motd file.
|
||||
# A simple Phrase (<127 chars) if you don't want to use a motd file.
|
||||
;MotdPhrase = "Hello world!"
|
||||
|
||||
# The name of the IRC network to which this server belongs. This name
|
||||
# is optional, should only contain ASCII characters, and can't contain
|
||||
# spaces. It is only used to inform clients. The default is empty,
|
||||
# so no network name is announced to clients.
|
||||
;Network = aIRCnetwork
|
||||
|
||||
# Global password for all users needed to connect to the server.
|
||||
# (Default: not set)
|
||||
;Password = abc
|
||||
@@ -84,6 +94,13 @@
|
||||
# to not yet (or no longer) connected servers.
|
||||
;ConnectRetry = 60
|
||||
|
||||
# Number of seconds after which the whole daemon should shutdown when
|
||||
# no connections are left active after handling at least one client
|
||||
# (0: never, which is the default).
|
||||
# This can be useful for testing or when ngIRCd is started using
|
||||
# "socket activation" with systemd(8), for example.
|
||||
;IdleTimeout = 0
|
||||
|
||||
# Maximum number of simultaneous in- and outbound connections the
|
||||
# server is allowed to accept (0: unlimited):
|
||||
;MaxConnections = 0
|
||||
@@ -95,11 +112,21 @@
|
||||
# Maximum number of channels a user can be member of (0: no limit):
|
||||
;MaxJoins = 10
|
||||
|
||||
# Maximum length of an user nick name (Default: 9, as in RFC 2812).
|
||||
# Maximum length of an user nickname (Default: 9, as in RFC 2812).
|
||||
# Please note that all servers in an IRC network MUST use the same
|
||||
# maximum nick name length!
|
||||
# maximum nickname length!
|
||||
;MaxNickLength = 9
|
||||
|
||||
# Maximum penalty time increase in seconds, per penalty event. Set to -1
|
||||
# for no limit (the default), 0 to disable penalties altogether. The
|
||||
# daemon doesn't use penalty increases higher than 2 seconds during
|
||||
# normal operation, so values greater than 1 rarely make sense.
|
||||
;MaxPenaltyTime = -1
|
||||
|
||||
# Maximum number of channels returned in response to a /list
|
||||
# command (0: unlimited):
|
||||
;MaxListSize = 100
|
||||
|
||||
# After <PingTimeout> seconds of inactivity the server will send a
|
||||
# PING to the peer to test whether it is alive or not.
|
||||
;PingTimeout = 120
|
||||
@@ -113,6 +140,12 @@
|
||||
# behavior of ngIRCd. If you want to get started quickly, you most
|
||||
# probably don't have to make changes here -- they are all optional.
|
||||
|
||||
# List of allowed channel types (channel prefixes) for newly created
|
||||
# channels on the local server. By default, all supported channel
|
||||
# types are allowed. Set this variable to the empty string to disallow
|
||||
# creation of new channels by local clients at all.
|
||||
;AllowedChannelTypes = #&+
|
||||
|
||||
# Are remote IRC operators allowed to control this server, e.g.
|
||||
# use commands like CONNECT, SQUIT, DIE, ...?
|
||||
;AllowRemoteOper = no
|
||||
@@ -125,18 +158,31 @@
|
||||
;ChrootDir = /var/empty
|
||||
|
||||
# Set this hostname for every client instead of the real one.
|
||||
# Please note: don't use the percentage sign ("%"), it is reserved for
|
||||
# future extensions!
|
||||
;CloakHost = irc.example.net
|
||||
# Use %x to add the hashed value of the original hostname.
|
||||
;CloakHost = cloaked.host
|
||||
|
||||
# Set every clients' user name to their nick name
|
||||
# Use this hostname for hostname cloaking on clients that have the
|
||||
# user mode "+x" set, instead of the name of the server.
|
||||
# Use %x to add the hashed value of the original hostname.
|
||||
;CloakHostModeX = cloaked.user
|
||||
|
||||
# The Salt for cloaked hostname hashing. When undefined a random
|
||||
# hash is generated after each server start.
|
||||
;CloakHostSalt = abcdefghijklmnopqrstuvwxyz
|
||||
|
||||
# Set every clients' user name to their nickname
|
||||
;CloakUserToNick = yes
|
||||
|
||||
# Try to connect to other IRC servers using IPv4 and IPv6, if possible.
|
||||
;ConnectIPv6 = yes
|
||||
;ConnectIPv4 = yes
|
||||
|
||||
# Do any DNS lookups when a client connects to the server.
|
||||
# Default user mode(s) to set on new local clients. Please note that
|
||||
# only modes can be set that the client could set using regular MODE
|
||||
# commands, you can't set "a" (away) for example! Default: none.
|
||||
;DefaultUserModes = i
|
||||
|
||||
# Do DNS lookups when a client connects to the server.
|
||||
;DNS = yes
|
||||
|
||||
# Do IDENT lookups if ngIRCd has been compiled with support for it.
|
||||
@@ -144,19 +190,26 @@
|
||||
# prepended to their user name.
|
||||
;Ident = yes
|
||||
|
||||
# Directory containing configuration snippets (*.conf), that should
|
||||
# be read in after parsing this configuration file.
|
||||
;IncludeDir = :ETCDIR:/conf.d
|
||||
|
||||
# Enhance user privacy slightly (useful for IRC server on TOR or I2P)
|
||||
# by censoring some information like idle time, logon time, etc.
|
||||
;MorePrivacy = no
|
||||
|
||||
# Normally ngIRCd doesn't send any messages to a client until it is
|
||||
# registered. Enable this option to let the daemon send "NOTICE AUTH"
|
||||
# registered. Enable this option to let the daemon send "NOTICE *"
|
||||
# messages to clients while connecting.
|
||||
;NoticeAuth = no
|
||||
;NoticeBeforeRegistration = no
|
||||
|
||||
# Should IRC Operators be allowed to use the MODE command even if
|
||||
# they are not(!) channel-operators?
|
||||
;OperCanUseMode = no
|
||||
|
||||
# Should IRC Operators get AutoOp (+o) in persistent (+P) channels?
|
||||
;OperChanPAutoOp = yes
|
||||
|
||||
# Mask IRC Operator mode requests as if they were coming from the
|
||||
# server? (This is a compatibility hack for ircd-irc2 servers)
|
||||
;OperServerMode = no
|
||||
@@ -179,8 +232,14 @@
|
||||
# character prepended to their respective user names!
|
||||
;PAMIsOptional = no
|
||||
|
||||
# Allow Pre-Defined Channels only (see Section [Channels])
|
||||
;PredefChannelsOnly = no
|
||||
# When PAM is enabled, this value determines the used PAM
|
||||
# configuration.
|
||||
# This setting allows to run multiple ngIRCd instances with
|
||||
# different PAM configurations on each instance.
|
||||
# If you set it to "ngircd-foo", PAM will use
|
||||
# /etc/pam.d/ngircd-foo instead of the default
|
||||
# /etc/pam.d/ngircd.
|
||||
;PAMServiceName = ngircd
|
||||
|
||||
# Let ngIRCd send an "authentication PING" when a new client connects,
|
||||
# and register this client only after receiving the corresponding
|
||||
@@ -210,6 +269,15 @@
|
||||
# SSL Server Key Certificate
|
||||
;CertFile = :ETCDIR:/ssl/server-cert.pem
|
||||
|
||||
# Select cipher suites allowed for SSL/TLS connections. This defaults
|
||||
# to HIGH:!aNULL:@STRENGTH (OpenSSL) or SECURE128 (GnuTLS).
|
||||
# See 'man 1ssl ciphers' (OpenSSL) or 'man 3 gnutls_priority_init'
|
||||
# (GnuTLS) for details.
|
||||
# For OpenSSL:
|
||||
;CipherList = HIGH:!aNULL:@STRENGTH:!SSLv3
|
||||
# For GnuTLS:
|
||||
;CipherList = SECURE128:-VERS-SSL3.0
|
||||
|
||||
# Diffie-Hellman parameters
|
||||
;DHFile = :ETCDIR:/ssl/dhparams.pem
|
||||
|
||||
@@ -226,7 +294,7 @@
|
||||
# [Operator] sections are used to define IRC Operators. There may be
|
||||
# more than one [Operator] block, one for each local operator.
|
||||
|
||||
# ID of the operator (may be different of the nick name)
|
||||
# ID of the operator (may be different of the nickname)
|
||||
;Name = TheOper
|
||||
|
||||
# Password of the IRC operator
|
||||
@@ -241,7 +309,7 @@
|
||||
[Server]
|
||||
# Other servers are configured in [Server] sections. If you
|
||||
# configure a port for the connection, then this ngircd tries to
|
||||
# connect to to the other server on the given port; if not it waits
|
||||
# connect to the other server on the given port; if not it waits
|
||||
# for the other server to connect.
|
||||
# There may be more than one server block, one for each server.
|
||||
#
|
||||
@@ -289,15 +357,16 @@
|
||||
# Connect to the remote server using TLS/SSL (Default: false)
|
||||
;SSLConnect = yes
|
||||
|
||||
# Define a (case insensitive) mask matching nick names that should be
|
||||
# treated as IRC services when introduced via this remote server.
|
||||
# Define a (case insensitive) list of masks matching nicknames that
|
||||
# should be treated as IRC services when introduced via this remote
|
||||
# server, separated by commas (",").
|
||||
# REGULAR SERVERS DON'T NEED this parameter, so leave it empty
|
||||
# (which is the default).
|
||||
# When you are connecting IRC services which mask as a IRC server
|
||||
# and which use "virtual users" to communicate with, for example
|
||||
# "NickServ" and "ChanServ", you should set this parameter to
|
||||
# something like "*Serv".
|
||||
;ServiceMask = *Serv
|
||||
# something like "*Serv" or "NickServ,ChanServ,XyzServ".
|
||||
;ServiceMask = *Serv,Global
|
||||
|
||||
[Server]
|
||||
# More [Server] sections, if you like ...
|
||||
@@ -316,19 +385,16 @@
|
||||
# Topic for this channel
|
||||
;Topic = a great topic
|
||||
|
||||
# Initial channel modes
|
||||
;Modes = tnk
|
||||
|
||||
# initial channel password (mode k)
|
||||
;Key = Secret
|
||||
# Initial channel modes, as used in "MODE" commands. Modifying lists
|
||||
# (ban list, invite list, exception list) is supported.
|
||||
# This option can be specified multiple times, evaluated top to bottom.
|
||||
;Modes = +tnk mykey +l 5
|
||||
;Modes = +b nick!~user@bad.host.example.com
|
||||
|
||||
# Key file, syntax for each line: "<user>:<nick>:<key>".
|
||||
# Default: none.
|
||||
;KeyFile = :ETCDIR:/#chan.key
|
||||
|
||||
# maximum users per channel (mode l)
|
||||
;MaxUsers = 23
|
||||
|
||||
[Channel]
|
||||
# More [Channel] sections, if you like ...
|
||||
|
||||
|
1
doc/src/.gitignore
vendored
1
doc/src/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
html
|
105
doc/src/Doxyfile
105
doc/src/Doxyfile
@@ -16,106 +16,55 @@
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
|
||||
# by quotes) that should identify the project.
|
||||
DOXYFILE_ENCODING = UTF-8
|
||||
|
||||
PROJECT_NAME = ngIRCd
|
||||
|
||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
||||
# base path where the generated documentation will be put.
|
||||
# If a relative path is entered, it will be relative to the location
|
||||
# where doxygen was started. If left blank the current directory will be used.
|
||||
PROJECT_BRIEF = "Lightweight Internet Relay Chat server"
|
||||
PROJECT_LOGO = "../../contrib/ngIRCd-Logo.gif"
|
||||
|
||||
OUTPUT_DIRECTORY = .
|
||||
|
||||
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
|
||||
# can be used to strip a user-defined part of the path. Stripping is
|
||||
# only done if one of the specified strings matches the left-hand part of
|
||||
# the path. The tag can be used to show relative paths in the file list.
|
||||
# If left blank the directory from which doxygen is run is used as the
|
||||
# path to strip.
|
||||
|
||||
STRIP_FROM_PATH = ../..
|
||||
|
||||
# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
|
||||
# will interpret the first line (until the first dot) of a JavaDoc-style
|
||||
# comment as the brief description. If set to NO, the JavaDoc
|
||||
# comments will behave just like the Qt-style comments (thus requiring an
|
||||
# explicit @brief command for a brief description.
|
||||
|
||||
JAVADOC_AUTOBRIEF = YES
|
||||
|
||||
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
|
||||
# sources only. Doxygen will then generate output that is more tailored for C.
|
||||
# For instance, some of the names that are used will be different. The list
|
||||
# of all members will be omitted, etc.
|
||||
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
TYPEDEF_HIDES_STRUCT = YES
|
||||
|
||||
TAB_SIZE = 8
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
|
||||
# documentation are documented, even if no documentation was available.
|
||||
# Private class members and static file members will be hidden unless
|
||||
# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
|
||||
|
||||
EXTRACT_ALL = YES
|
||||
|
||||
# If the EXTRACT_STATIC tag is set to YES all static members of a file
|
||||
# will be included in the documentation.
|
||||
|
||||
EXTRACT_STATIC = YES
|
||||
|
||||
# If the sources in your project are distributed over multiple directories
|
||||
# then setting the SHOW_DIRECTORIES tag to YES will show the directory
|
||||
# hierarchy in the documentation. The default is NO.
|
||||
|
||||
SHOW_DIRECTORIES = YES
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
QUIET = NO
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = YES
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# The INPUT tag can be used to specify the files and/or directories that
|
||||
# contain documented source files. You may enter file names like "myfile.cpp"
|
||||
# or directories like "/usr/src/myproject". Separate the files or directories
|
||||
# with spaces.
|
||||
|
||||
INPUT = ../../src
|
||||
|
||||
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
|
||||
# should be searched for input files as well. Possible values are YES and NO.
|
||||
# If left blank NO is used.
|
||||
|
||||
INPUT_ENCODING = UTF-8
|
||||
RECURSIVE = YES
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# If the SOURCE_BROWSER tag is set to YES then a list of source files will
|
||||
# be generated. Documented entities will be cross-referenced with these sources.
|
||||
# Note: To get rid of all source code in the generated output, make sure also
|
||||
# VERBATIM_HEADERS is set to NO.
|
||||
|
||||
SOURCE_BROWSER = YES
|
||||
|
||||
# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
|
||||
# doxygen to hide any special comment blocks from generated source code
|
||||
# fragments. Normal C and C++ comments will always remain visible.
|
||||
|
||||
STRIP_CODE_COMMENTS = NO
|
||||
|
||||
# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
|
||||
# function all documented functions referencing it will be listed.
|
||||
|
||||
REFERENCED_BY_RELATION = YES
|
||||
|
||||
# If the REFERENCES_RELATION tag is set to YES then for each documented
|
||||
# function all documented entities called/used by that function will be listed.
|
||||
|
||||
REFERENCES_RELATION = YES
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
@@ -123,19 +72,7 @@ REFERENCES_RELATION = YES
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
GENERATE_HTML = YES
|
||||
|
||||
# The HTML_FOOTER tag can be used to specify a personal HTML footer for each
|
||||
# generated HTML page. If it is left blank doxygen will generate a standard
|
||||
# footer.
|
||||
|
||||
HTML_FOOTER = footer.inc.html
|
||||
|
||||
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
|
||||
# documentation will contain sections that can be hidden and shown after the
|
||||
# page has loaded. For this to work a browser that supports JavaScript and
|
||||
# DHTML is required (for instance Mozilla 1.0+, Firefox Netscape 6.0+,
|
||||
# Internet explorer 5.0+, Konqueror, or Safari).
|
||||
|
||||
HTML_DYNAMIC_SECTIONS = YES
|
||||
|
||||
GENERATE_DOCSET = NO
|
||||
@@ -151,14 +88,6 @@ GENERATE_PERLMOD = NO
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# The PREDEFINED tag can be used to specify one or more macro names that
|
||||
# are defined before the preprocessor is started (similar to the -D option of
|
||||
# gcc). The argument of the tag is a list of macros of the form: name
|
||||
# or name=definition (no spaces). If the definition and the = are
|
||||
# omitted =1 is assumed. To prevent a macro definition from being
|
||||
# undefined via #undef or recursively expanded use the := operator
|
||||
# instead of the = operator.
|
||||
|
||||
PREDEFINED = DEBUG ZLIB PAM ZEROCONF CONN_MODULE __client_c__
|
||||
|
||||
# -eof-
|
||||
|
@@ -1,6 +1,6 @@
|
||||
|
||||
<hr class="footer">
|
||||
<p>
|
||||
<p style="text-align: center">
|
||||
ngIRCd
|
||||
<a href="http://ngircd.barton.de/">Homepage</a>,
|
||||
<a href="http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git">GIT-Repository</a>,
|
||||
|
2
man/.gitignore
vendored
2
man/.gitignore
vendored
@@ -1,2 +0,0 @@
|
||||
ngircd.8
|
||||
ngircd.conf.5
|
@@ -1,15 +1,12 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001,2002 by Alexander Barton (alex@barton.de)
|
||||
# Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
|
||||
# der GNU General Public License (GPL), wie von der Free Software Foundation
|
||||
# herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
|
||||
# der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
|
||||
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||
#
|
||||
# $Id: Makefile.am,v 1.6 2006/12/25 16:13:26 alex Exp $
|
||||
# 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.
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
#
|
||||
|
||||
TEMPLATE_MANS = ngircd.conf.5.tmpl ngircd.8.tmpl
|
||||
@@ -17,10 +14,10 @@ TEMPLATE_MANS = ngircd.conf.5.tmpl ngircd.8.tmpl
|
||||
SUFFIXES = .tmpl .
|
||||
|
||||
.tmpl:
|
||||
sed \
|
||||
-e s@:SBINDIR:@${sbindir}@ \
|
||||
-e s@:BINDIR:@${bindir}@ \
|
||||
-e s@:ETCDIR:@${sysconfdir}@ \
|
||||
$(AM_V_GEN)sed \
|
||||
-e "s@:SBINDIR:@${sbindir}@" \
|
||||
-e "s@:BINDIR:@${bindir}@" \
|
||||
-e "s@:ETCDIR:@${sysconfdir}@" \
|
||||
<$< >$@
|
||||
|
||||
man_MANS = ngircd.conf.5 ngircd.8
|
||||
|
@@ -1,30 +1,40 @@
|
||||
.\"
|
||||
.\" ngircd(8) manual page template
|
||||
.\"
|
||||
.TH ngircd 8 "Jul 2011" ngircd "ngIRCd Manual"
|
||||
.TH ngircd 8 "May 2020" ngIRCd "ngIRCd Manual"
|
||||
.SH NAME
|
||||
ngIRCd \- the next generation IRC daemon
|
||||
ngIRCd \- the "next generation" IRC daemon
|
||||
.SH SYNOPSIS
|
||||
.B ngircd [
|
||||
.B ngircd
|
||||
[
|
||||
.I Options
|
||||
.B ]
|
||||
]
|
||||
.SH DESCRIPTION
|
||||
.BR ngIRCd
|
||||
is a free open source daemon for the Internet Relay Chat (IRC),
|
||||
developed under the GNU General Public License (GPL).
|
||||
is a free, portable and lightweight Internet Relay Chat server for small
|
||||
or private networks, developed under the GNU General Public License (GPL).
|
||||
.PP
|
||||
It's written from scratch and is not based upon the original IRCd like
|
||||
many others. It is easy to configure, supports server links (even with
|
||||
original ircd's) and runs on hosts with changing IP addresses (such as
|
||||
dial-in networks).
|
||||
The server is quite easy to configure, can handle dynamic IP addresses, and
|
||||
optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for
|
||||
user authentication as well as character set conversion for legacy clients. The
|
||||
server has been written from scratch and is not based on the "forefather", the
|
||||
daemon of the IRCNet.
|
||||
.PP
|
||||
Currently supported platforms include AIX, A/UX, FreeBSD, HP-UX, IRIX,
|
||||
Linux, Mac OS X, NetBSD, OpenBSD, Solaris, and Windows with Cygwin.
|
||||
The name ngIRCd means
|
||||
.IR "next-generation IRC daemon",
|
||||
which is a little bit exaggerated:
|
||||
.IR "lightweight Internet Relay Chat server"
|
||||
most probably would have been a better name :-)
|
||||
.PP
|
||||
Currently supported platforms include AIX, A/UX, FreeBSD, HP-UX, Hurd, IRIX,
|
||||
Linux, Mac OS X, Minix, NetBSD, OpenBSD, Solaris, and Windows with Cygwin.
|
||||
As ngIRCd relies on UNIX standards and uses GNU automake and GNU autoconf
|
||||
there are good chances that it also supports other UNIX-based operating
|
||||
systems as well. By default, ngIRCd writes diagnostic and informational messages using
|
||||
the syslog mechanism.
|
||||
systems as well.
|
||||
.PP
|
||||
By default ngIRCd logs diagnostic and informational messages using the syslog
|
||||
mechanism, or writes directly to the console when running in the foreground
|
||||
(see below).
|
||||
.SH OPTIONS
|
||||
The default behavior of
|
||||
.BR ngircd
|
||||
@@ -78,7 +88,7 @@ It's wise to use "ngircd \-\-configtest" to validate the configuration file
|
||||
after changing it.
|
||||
.SH DEBUGGING
|
||||
When ngIRCd is compiled with debug code, that is, its source code has
|
||||
been ./configure'd with "--enable-debug" and/or "--enable-sniffer" (witch
|
||||
been ./configure'd with "\-\-enable\-debug" and/or "\-\-enable\-sniffer" (witch
|
||||
enables debug mode automatically as well), you can use two more command
|
||||
line options and two more signals to debug problems with the daemon itself
|
||||
or IRC clients:
|
||||
@@ -91,7 +101,7 @@ Enable debug mode and log extra messages.
|
||||
\fB\-s\fR, \fB\-\-sniffer\fR
|
||||
Enable IRC protocol sniffer, which logs all sent and received IRC commands to
|
||||
the console/syslog. This option requires that ngIRCd has been ./configure'd
|
||||
with "--enable-sniffer" and enables debug mode automatically, too.
|
||||
with "\-\-enable\-sniffer" and enables debug mode automatically, too.
|
||||
.PP
|
||||
\fBSignals:\fR
|
||||
.TP
|
||||
|
@@ -1,7 +1,7 @@
|
||||
.\"
|
||||
.\" ngircd.conf(5) manual page template
|
||||
.\"
|
||||
.TH ngircd.conf 5 "Jun 2011" ngircd "ngIRCd Manual"
|
||||
.TH ngircd.conf 5 "May 2020" ngIRCd "ngIRCd Manual"
|
||||
.SH NAME
|
||||
ngircd.conf \- configuration file of ngIRCd
|
||||
.SH SYNOPSIS
|
||||
@@ -60,7 +60,7 @@ The main configuration of the server is stored in the
|
||||
section, like the server name, administrative information and the ports on
|
||||
which the server should be listening. The variables in this section have to be
|
||||
adjusted to the local requirements most of the time, whereas all the variables
|
||||
in the other sections can be left on there defaults very often.
|
||||
in the other sections can be left on their defaults very often.
|
||||
.PP
|
||||
Options in the
|
||||
.I [Limits]
|
||||
@@ -82,12 +82,13 @@ sections. And
|
||||
blocks are used to configure pre-defined ("persistent") IRC channels.
|
||||
.PP
|
||||
There can be more than one [Operator], [Server] and [Channel] section per
|
||||
configuration file (one for each operator, server, and channel), but only
|
||||
exactly one [Global], one [Limits], one [Options], and one [SSL] section.
|
||||
configuration file, one for each operator, server, and channel. [Global],
|
||||
[Limits], [Options], and [SSL] sections can occur multiple times, too, but
|
||||
each variable overwrites itself, only the last assignment is relevant.
|
||||
.SH [GLOBAL]
|
||||
The
|
||||
.I [Global]
|
||||
section of this file is used to define the main configuration of the server,
|
||||
section is used to define the main configuration of the server,
|
||||
like the server name and the ports on which the server should be listening.
|
||||
These settings depend on your personal preferences, so you should make sure
|
||||
that they correspond to your installation and setup!
|
||||
@@ -101,6 +102,12 @@ IRC network and must contain at least one dot (".") character.
|
||||
Information about the server and the administrator, used by the ADMIN
|
||||
command. This information is not required by the server but by RFC!
|
||||
.TP
|
||||
\fBHelpFile\fR (string)
|
||||
Text file which contains the ngIRCd help text. This file is required
|
||||
to display help texts when using the "HELP <cmd>" command.
|
||||
Please note: Changes made to this file take effect when ngircd starts up
|
||||
or is instructed to re-read its configuration file.
|
||||
.TP
|
||||
\fBInfo\fR (string)
|
||||
Info text of the server. This will be shown by WHOIS and LINKS requests for
|
||||
example.
|
||||
@@ -118,7 +125,13 @@ take effect when ngircd starts up or is instructed to re-read its
|
||||
configuration file.
|
||||
.TP
|
||||
\fBMotdPhrase\fR (string)
|
||||
A simple Phrase (<256 chars) if you don't want to use a MOTD file.
|
||||
A simple Phrase (<127 chars) if you don't want to use a MOTD file.
|
||||
.TP
|
||||
\fBNetwork\fR (string)
|
||||
The name of the IRC network to which this server belongs. This name is
|
||||
optional, should only contain ASCII characters, and can't contain spaces.
|
||||
It is only used to inform clients. The default is empty, so no network
|
||||
name is announced to clients.
|
||||
.TP
|
||||
\fBPassword\fR (string)
|
||||
Global password for all users needed to connect to the server. The default is
|
||||
@@ -127,16 +140,16 @@ if ngIRCd is using PAM!
|
||||
.TP
|
||||
\fBPidFile\fR (string)
|
||||
This tells ngIRCd to write its current process ID to a file. Note that the
|
||||
pidfile is written AFTER chroot and switching the user ID, e.g. the directory
|
||||
the pidfile resides in must be writable by the ngIRCd user and exist in the
|
||||
chroot directory (if configured, see above).
|
||||
"PID file" is written AFTER chroot and switching the user ID, therefore the
|
||||
directory the file resides in must be writable by the ngIRCd user and exist
|
||||
in the chroot directory (if configured, see above).
|
||||
.TP
|
||||
\fBPorts\fR (list of numbers)
|
||||
Ports on which the server should listen for unencrypted connections. There
|
||||
may be more than one port, separated with commas (","). Default: 6667.
|
||||
Port number(s) on which the server should listen for unencrypted connections.
|
||||
There may be more than one port, separated with commas (","). Default: 6667.
|
||||
.TP
|
||||
\fBServerGID\fR (string or number)
|
||||
Group ID under which the ngIRCd should run; you can use the name of the
|
||||
Group ID under which the ngIRCd daemon should run; you can use the name of the
|
||||
group or the numerical ID.
|
||||
.PP
|
||||
.RS
|
||||
@@ -146,8 +159,8 @@ For this to work the server must have been started with root privileges!
|
||||
.RE
|
||||
.TP
|
||||
\fBServerUID\fR (string or number)
|
||||
User ID under which the server should run; you can use the name of the user
|
||||
or the numerical ID.
|
||||
User ID under which the ngIRCd daemon should run; you can use the name of the
|
||||
user or the numerical ID.
|
||||
.PP
|
||||
.RS
|
||||
.B Attention:
|
||||
@@ -157,13 +170,19 @@ addition, the configuration and MOTD files must be readable by this user,
|
||||
otherwise RESTART and REHASH won't work!
|
||||
.RE
|
||||
.SH [LIMITS]
|
||||
Define some limits and timeouts for this ngIRCd instance. Default values
|
||||
should be safe, but it is wise to double-check :-)
|
||||
This section is used to define some limits and timeouts for this ngIRCd
|
||||
instance. Default values should be safe, but it is wise to double-check :-)
|
||||
.TP
|
||||
\fBConnectRetry\fR (number)
|
||||
The server tries every <ConnectRetry> seconds to establish a link to not yet
|
||||
(or no longer) connected servers. Default: 60.
|
||||
.TP
|
||||
\fBIdleTimeout\fR (number)
|
||||
Number of seconds after which the whole daemon should shutdown when no
|
||||
connections are left active after handling at least one client (0: never). This
|
||||
can be useful for testing or when ngIRCd is started using "socket activation"
|
||||
with systemd(8), for example. Default: 0.
|
||||
.TP
|
||||
\fBMaxConnections\fR (number)
|
||||
Maximum number of simultaneous in- and outbound connections the server is
|
||||
allowed to accept (0: unlimited). Default: 0.
|
||||
@@ -178,10 +197,19 @@ Maximum number of channels a user can be member of (0: no limit).
|
||||
Default: 10.
|
||||
.TP
|
||||
\fBMaxNickLength\fR (number)
|
||||
Maximum length of an user nick name (Default: 9, as in RFC 2812). Please
|
||||
note that all servers in an IRC network MUST use the same maximum nick name
|
||||
Maximum length of an user nickname (Default: 9, as in RFC 2812). Please
|
||||
note that all servers in an IRC network MUST use the same maximum nickname
|
||||
length!
|
||||
.TP
|
||||
\fBMaxPenaltyTime\fR (number)
|
||||
Maximum penalty time increase in seconds, per penalty event. Set to -1 for no
|
||||
limit (the default), 0 to disable penalties altogether. ngIRCd doesn't use
|
||||
penalty increases higher than 2 seconds during normal operation, so values
|
||||
greater than 1 rarely make sense.
|
||||
.TP
|
||||
\fBMaxListSize\fR (number)
|
||||
Maximum number of channels returned in response to a LIST command. Default: 100.
|
||||
.TP
|
||||
\fBPingTimeout\fR (number)
|
||||
After <PingTimeout> seconds of inactivity the server will send a PING to
|
||||
the peer to test whether it is alive or not. Default: 120.
|
||||
@@ -191,13 +219,19 @@ If a client fails to answer a PING with a PONG within <PongTimeout>
|
||||
seconds, it will be disconnected by the server. Default: 20.
|
||||
.SH [OPTIONS]
|
||||
Optional features and configuration options to further tweak the behavior of
|
||||
ngIRCd. If you want to get started quickly, you most probably don't have to
|
||||
make changes here -- they are all optional.
|
||||
ngIRCd are configured in this section. If you want to get started quickly, you
|
||||
most probably don't have to make changes here -- they are all optional.
|
||||
.TP
|
||||
\fBAllowedChannelTypes\fR (string)
|
||||
List of allowed channel types (channel prefixes) for newly created channels
|
||||
on the local server. By default, all supported channel types are allowed.
|
||||
Set this variable to the empty string to disallow creation of new channels
|
||||
by local clients at all. Default: #&+
|
||||
.TP
|
||||
\fBAllowRemoteOper\fR (boolean)
|
||||
Are IRC operators connected to remote servers allowed to control this server,
|
||||
e.g. are they allowed to use administrative commands like CONNECT, DIE,
|
||||
SQUIT, ... that affect this server? Default: no.
|
||||
If this option is active, IRC operators connected to remote servers are allowed
|
||||
to control this local server using administrative commands, for example like
|
||||
CONNECT, DIE, SQUIT etc. Default: no.
|
||||
.TP
|
||||
\fBChrootDir\fR (string)
|
||||
A directory to chroot in when everything is initialized. It doesn't need
|
||||
@@ -212,17 +246,20 @@ For this to work the server must have been started with root privileges!
|
||||
.TP
|
||||
\fBCloakHost\fR (string)
|
||||
Set this hostname for every client instead of the real one. Default: empty,
|
||||
don't change.
|
||||
.PP
|
||||
.RS
|
||||
.B Please note:
|
||||
.br
|
||||
Don't use the percentage sign ("%"), it is reserved for future extensions!
|
||||
.RE
|
||||
don't change. Use %x to add the hashed value of the original hostname.
|
||||
.TP
|
||||
\fBCloakHostModeX\fR (string)
|
||||
Use this hostname for hostname cloaking on clients that have the user mode
|
||||
"+x" set, instead of the name of the server. Default: empty, use the name
|
||||
of the server. Use %x to add the hashed value of the original hostname
|
||||
.TP
|
||||
\fBCloakHostSalt\fR (string)
|
||||
The Salt for cloaked hostname hashing. When undefined a random hash is
|
||||
generated after each server start.
|
||||
.TP
|
||||
\fBCloakUserToNick\fR (boolean)
|
||||
Set every clients' user name to their nick name and hide the one supplied
|
||||
by the IRC client. Default: no.
|
||||
Set every clients' user name and real name to their nickname and hide the one
|
||||
supplied by the IRC client. Default: no.
|
||||
.TP
|
||||
\fBConnectIPv4\fR (boolean)
|
||||
Set this to no if you do not want ngIRCd to connect to other IRC servers using
|
||||
@@ -234,6 +271,12 @@ Set this to no if you do not want ngIRCd to connect to other IRC servers using
|
||||
the IPv6 protocol.
|
||||
Default: yes.
|
||||
.TP
|
||||
\fBDefaultUserModes\fR (string)
|
||||
Default user mode(s) to set on new local clients. Please note that only modes
|
||||
can be set that the client could set using regular MODE commands, you can't
|
||||
set "a" (away) for example!
|
||||
Default: none.
|
||||
.TP
|
||||
\fBDNS\fR (boolean)
|
||||
If set to false, ngIRCd will not make any DNS lookups when clients connect.
|
||||
If you configure the daemon to connect to other servers, ngIRCd may still
|
||||
@@ -247,24 +290,34 @@ Users identified using IDENT are registered without the "~" character
|
||||
prepended to their user name.
|
||||
Default: yes.
|
||||
.TP
|
||||
\fBIncludeDir\fR (string)
|
||||
Directory containing configuration snippets (*.conf), that should be read in
|
||||
after parsing the current configuration file.
|
||||
Default: none.
|
||||
.TP
|
||||
\fBMorePrivacy\fR (boolean)
|
||||
This will cause ngIRCd to censor user idle time, logon time as well as the
|
||||
part/quit messages (that are sometimes used to inform everyone about which
|
||||
client software is being used). WHOWAS requests are also silently ignored.
|
||||
PART/QUIT messages (that are sometimes used to inform everyone about which
|
||||
client software is being used). WHOWAS requests are also silently ignored,
|
||||
and NAMES output doesn't list any clients for non-members.
|
||||
This option is most useful when ngIRCd is being used together with
|
||||
anonymizing software such as TOR or I2P and one does not wish to make it
|
||||
too easy to collect statistics on the users.
|
||||
Default: no.
|
||||
.TP
|
||||
\fBNoticeAuth\fR (boolean)
|
||||
\fBNoticeBeforeRegistration\fR (boolean)
|
||||
Normally ngIRCd doesn't send any messages to a client until it is registered.
|
||||
Enable this option to let the daemon send "NOTICE AUTH" messages to clients
|
||||
Enable this option to let the daemon send "NOTICE *" messages to clients
|
||||
while connecting. Default: no.
|
||||
.TP
|
||||
\fBOperCanUseMode\fR (boolean)
|
||||
Should IRC Operators be allowed to use the MODE command even if they are
|
||||
not(!) channel-operators? Default: no.
|
||||
.TP
|
||||
\fBOperChanPAutoOp\fR (boolean)
|
||||
Should IRC Operators get AutoOp (+o) in persistent (+P) channels?
|
||||
Default: yes.
|
||||
.TP
|
||||
\fBOperServerMode\fR (boolean)
|
||||
If \fBOperCanUseMode\fR is enabled, this may lead the compatibility problems
|
||||
with Servers that run the ircd-irc2 Software. This Option "masks" mode
|
||||
@@ -292,11 +345,13 @@ able to distinguish between Ident'ified and PAM-authenticated users: both
|
||||
don't have a "~" character prepended to their respective user names!
|
||||
Default: no.
|
||||
.TP
|
||||
\fBPredefChannelsOnly\fR (boolean)
|
||||
If enabled, no new channels can be created. Useful if you do not want to have
|
||||
other channels than those defined in [Channel] sections in the configuration
|
||||
file on this server.
|
||||
Default: no.
|
||||
\fBPAMServiceName\fR (string)
|
||||
When PAM is enabled, this value determines the used PAM configuration.
|
||||
This setting allows running multiple ngIRCd instances with different
|
||||
PAM configurations on each instance. If you set it to "ngircd-foo",
|
||||
PAM will use /etc/pam.d/ngircd-foo instead of the default
|
||||
/etc/pam.d/ngircd.
|
||||
Default: ngircd.
|
||||
.TP
|
||||
\fBRequireAuthPing\fR (boolean)
|
||||
Let ngIRCd send an "authentication PING" when a new client connects, and
|
||||
@@ -333,6 +388,12 @@ when it is compiled with support for SSL using OpenSSL or GnuTLS!
|
||||
\fBCertFile\fR (string)
|
||||
SSL Certificate file of the private server key.
|
||||
.TP
|
||||
\fBCipherList\fR (string)
|
||||
Select cipher suites allowed for SSL/TLS connections. This defaults to
|
||||
"HIGH:!aNULL:@STRENGTH:!SSLv3" (OpenSSL) or "SECURE128:-VERS-SSL3.0" (GnuTLS).
|
||||
Please see 'man 1ssl ciphers' (OpenSSL) and 'man 3 gnutls_priority_init'
|
||||
(GnuTLS) for details.
|
||||
.TP
|
||||
\fBDHFile\fR (string)
|
||||
Name of the Diffie-Hellman Parameter file. Can be created with GnuTLS
|
||||
"certtool \-\-generate-dh-params" or "openssl dhparam". If this file is not
|
||||
@@ -359,7 +420,7 @@ sections are used to define IRC Operators. There may be more than one
|
||||
block, one for each local operator.
|
||||
.TP
|
||||
\fBName\fR (string)
|
||||
ID of the operator (may be different of the nick name).
|
||||
ID of the operator (may be different of the nickname).
|
||||
.TP
|
||||
\fBPassword\fR (string)
|
||||
Password of the IRC operator.
|
||||
@@ -371,7 +432,7 @@ Example: nick!ident@*.example.com
|
||||
Other servers are configured in
|
||||
.I [Server]
|
||||
sections. If you configure a port for the connection, then this ngIRCd
|
||||
tries to connect to to the other server on the given port (active);
|
||||
tries to connect to the other server on the given port (active);
|
||||
if not, it waits for the other server to connect (passive).
|
||||
.PP
|
||||
ngIRCd supports "server groups": You can assign an "ID" to every server
|
||||
@@ -419,14 +480,16 @@ You can use the IRC Operator command CONNECT later on to create the link.
|
||||
Connect to the remote server using TLS/SSL. Default: false.
|
||||
.TP
|
||||
\fBServiceMask\fR (string)
|
||||
Define a (case insensitive) mask matching nick names that should be treated as
|
||||
IRC services when introduced via this remote server. REGULAR SERVERS DON'T NEED
|
||||
this parameter, so leave it empty (which is the default).
|
||||
Define a (case insensitive) list of masks matching nicknames that should be
|
||||
treated as IRC services when introduced via this remote server, separated
|
||||
by commas (","). REGULAR SERVERS DON'T NEED this parameter, so leave it empty
|
||||
(which is the default).
|
||||
.PP
|
||||
.RS
|
||||
When you are connecting IRC services which mask as a IRC server and which use
|
||||
"virtual users" to communicate with, for example "NickServ" and "ChanServ",
|
||||
you should set this parameter to something like "*Serv".
|
||||
you should set this parameter to something like "*Serv", "*Serv,OtherNick",
|
||||
or "NickServ,ChanServ,XyzServ".
|
||||
.SH [CHANNEL]
|
||||
Pre-defined channels can be configured in
|
||||
.I [Channel]
|
||||
@@ -447,10 +510,12 @@ Name of the channel, including channel prefix ("#" or "&").
|
||||
Topic for this channel.
|
||||
.TP
|
||||
\fBModes\fR (string)
|
||||
Initial channel modes.
|
||||
.TP
|
||||
\fBKey\fR (string)
|
||||
Sets initial channel key (only relevant if channel mode "k" is set).
|
||||
Initial channel modes, as used in "MODE" commands. Modifying lists (ban list,
|
||||
invite list, exception list) is supported.
|
||||
.PP
|
||||
.RS
|
||||
This option can be specified multiple times, evaluated top to bottom.
|
||||
.RE
|
||||
.TP
|
||||
\fBKeyFile\fR (string)
|
||||
Path and file name of a "key file" containing individual channel keys for
|
||||
@@ -494,10 +559,6 @@ The file is not reopened on each access, so you can modify and overwrite it
|
||||
without problems, but moving or deleting the file will have not effect until
|
||||
the daemon re-reads its configuration!
|
||||
.RE
|
||||
.TP
|
||||
\fBMaxUsers\fR (number)
|
||||
Set maximum user limit for this channel (only relevant if channel mode "l"
|
||||
is set).
|
||||
.SH HINTS
|
||||
It's wise to use "ngircd \-\-configtest" to validate the configuration file
|
||||
after changing it. See
|
||||
|
4
src/.gitignore
vendored
4
src/.gitignore
vendored
@@ -1,4 +0,0 @@
|
||||
config.h
|
||||
config.h.in
|
||||
config.h.in~
|
||||
stamp-h1
|
@@ -1,14 +0,0 @@
|
||||
AUTOMAKE_OPTIONS = ansi2knr
|
||||
|
||||
INCLUDES = -I$(srcdir)/../portab
|
||||
|
||||
noinst_LIBRARIES = libngipaddr.a
|
||||
|
||||
libngipaddr_a_SOURCES = ng_ipaddr.c
|
||||
|
||||
noinst_HEADERS = ng_ipaddr.h
|
||||
|
||||
maintainer-clean-local:
|
||||
rm -f Makefile Makefile.in
|
||||
|
||||
# -eof-
|
21
src/ipaddr/Makefile.ng
Normal file
21
src/ipaddr/Makefile.ng
Normal file
@@ -0,0 +1,21 @@
|
||||
#
|
||||
# ipaddr/Makefile.am
|
||||
# (c) 2008 Florian Westphal <fw@strlen.de>, public domain.
|
||||
#
|
||||
|
||||
__ng_Makefile_am_template__
|
||||
|
||||
EXTRA_DIST = Makefile.ng
|
||||
|
||||
AM_CPPFLAGS = -I$(srcdir)/../portab
|
||||
|
||||
noinst_LIBRARIES = libngipaddr.a
|
||||
|
||||
libngipaddr_a_SOURCES = ng_ipaddr.c
|
||||
|
||||
noinst_HEADERS = ng_ipaddr.h
|
||||
|
||||
maintainer-clean-local:
|
||||
rm -f Makefile Makefile.in Makefile.am
|
||||
|
||||
# -eof-
|
@@ -23,7 +23,7 @@
|
||||
GLOBAL bool
|
||||
ng_ipaddr_init(ng_ipaddr_t *addr, const char *ip_str, UINT16 port)
|
||||
{
|
||||
#ifdef HAVE_GETADDRINFO
|
||||
#ifdef HAVE_WORKING_GETADDRINFO
|
||||
int ret;
|
||||
char portstr[64];
|
||||
struct addrinfo *res0;
|
||||
@@ -49,8 +49,8 @@ ng_ipaddr_init(ng_ipaddr_t *addr, const char *ip_str, UINT16 port)
|
||||
if (ret != 0)
|
||||
return false;
|
||||
|
||||
assert(sizeof(*addr) >= res0->ai_addrlen);
|
||||
if (sizeof(*addr) >= res0->ai_addrlen)
|
||||
assert(sizeof(*addr) >= (size_t)res0->ai_addrlen);
|
||||
if (sizeof(*addr) >= (size_t)res0->ai_addrlen)
|
||||
memcpy(addr, res0->ai_addr, res0->ai_addrlen);
|
||||
else
|
||||
ret = -1;
|
||||
|
@@ -4,6 +4,7 @@
|
||||
|
||||
#ifndef NG_IPADDR_HDR
|
||||
#define NG_IPADDR_HDR
|
||||
|
||||
#include "portab.h"
|
||||
|
||||
/**
|
||||
@@ -12,6 +13,7 @@
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
@@ -47,6 +49,7 @@ typedef struct NG_IP_ADDR_DONTUSE ng_ipaddr_t;
|
||||
static inline int
|
||||
ng_ipaddr_af(const ng_ipaddr_t *a)
|
||||
{
|
||||
assert(a != NULL);
|
||||
#ifdef WANT_IPV6
|
||||
return a->sa.sa_family;
|
||||
#else
|
||||
@@ -59,6 +62,7 @@ ng_ipaddr_af(const ng_ipaddr_t *a)
|
||||
static inline socklen_t
|
||||
ng_ipaddr_salen(const ng_ipaddr_t *a)
|
||||
{
|
||||
assert(a != NULL);
|
||||
#ifdef WANT_IPV6
|
||||
assert(a->sa.sa_family == AF_INET || a->sa.sa_family == AF_INET6);
|
||||
if (a->sa.sa_family == AF_INET6)
|
||||
@@ -75,11 +79,14 @@ ng_ipaddr_getport(const ng_ipaddr_t *a)
|
||||
#ifdef WANT_IPV6
|
||||
int af = a->sa.sa_family;
|
||||
|
||||
assert(a != NULL);
|
||||
assert(af == AF_INET || af == AF_INET6);
|
||||
|
||||
if (af == AF_INET6)
|
||||
return ntohs(a->sin6.sin6_port);
|
||||
#endif /* WANT_IPV6 */
|
||||
|
||||
assert(a != NULL);
|
||||
assert(a->sin4.sin_family == AF_INET);
|
||||
return ntohs(a->sin4.sin_port);
|
||||
}
|
||||
@@ -109,12 +116,15 @@ GLOBAL bool ng_ipaddr_tostr_r PARAMS((const ng_ipaddr_t *addr, char *dest));
|
||||
static inline const char*
|
||||
ng_ipaddr_tostr(const ng_ipaddr_t *addr)
|
||||
{
|
||||
assert(addr != NULL);
|
||||
return inet_ntoa(addr->sin4.sin_addr);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
ng_ipaddr_tostr_r(const ng_ipaddr_t *addr, char *d)
|
||||
{
|
||||
assert(addr != NULL);
|
||||
assert(d != NULL);
|
||||
strlcpy(d, inet_ntoa(addr->sin4.sin_addr), NG_INET_ADDRSTRLEN);
|
||||
return true;
|
||||
}
|
||||
|
3
src/ngircd/.gitignore
vendored
3
src/ngircd/.gitignore
vendored
@@ -1,3 +0,0 @@
|
||||
check-help
|
||||
check-version
|
||||
ngircd
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
|
||||
# Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# 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
|
||||
@@ -9,36 +9,108 @@
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
#
|
||||
|
||||
AUTOMAKE_OPTIONS = ../portab/ansi2knr
|
||||
__ng_Makefile_am_template__
|
||||
|
||||
INCLUDES = -I$(srcdir)/../portab -I$(srcdir)/../tool -I$(srcdir)/../ipaddr
|
||||
EXTRA_DIST = Makefile.ng
|
||||
|
||||
AM_CPPFLAGS = -I$(srcdir)/../portab -I$(srcdir)/../tool -I$(srcdir)/../ipaddr
|
||||
|
||||
LINTARGS = -weak -warnunixlib +unixlib -booltype BOOLEAN \
|
||||
-varuse -retvalother -emptyret -unrecog
|
||||
|
||||
sbin_PROGRAMS = ngircd
|
||||
|
||||
ngircd_SOURCES = ngircd.c array.c channel.c class.c client.c conf.c conn.c \
|
||||
conn-func.c conn-ssl.c conn-zip.c hash.c io.c irc.c irc-channel.c \
|
||||
irc-info.c irc-login.c irc-mode.c irc-op.c irc-oper.c irc-server.c \
|
||||
irc-write.c lists.c log.c match.c op.c numeric.c pam.c parse.c \
|
||||
proc.c resolve.c sighandlers.c
|
||||
ngircd_SOURCES = \
|
||||
ngircd.c \
|
||||
array.c \
|
||||
channel.c \
|
||||
class.c \
|
||||
client.c \
|
||||
client-cap.c \
|
||||
conf.c \
|
||||
conn.c \
|
||||
conn-encoding.c \
|
||||
conn-func.c \
|
||||
conn-ssl.c \
|
||||
conn-zip.c \
|
||||
hash.c \
|
||||
io.c \
|
||||
irc.c \
|
||||
irc-cap.c \
|
||||
irc-channel.c \
|
||||
irc-encoding.c \
|
||||
irc-info.c \
|
||||
irc-login.c \
|
||||
irc-metadata.c \
|
||||
irc-mode.c \
|
||||
irc-op.c \
|
||||
irc-oper.c \
|
||||
irc-server.c \
|
||||
irc-write.c \
|
||||
lists.c \
|
||||
log.c \
|
||||
login.c \
|
||||
match.c \
|
||||
numeric.c \
|
||||
op.c \
|
||||
pam.c \
|
||||
parse.c \
|
||||
proc.c \
|
||||
resolve.c \
|
||||
sighandlers.c
|
||||
|
||||
ngircd_LDFLAGS = -L../portab -L../tool -L../ipaddr
|
||||
|
||||
ngircd_LDADD = -lngportab -lngtool -lngipaddr
|
||||
|
||||
noinst_HEADERS = ngircd.h array.h channel.h class.h client.h conf.h \
|
||||
conf-ssl.h conn.h conn-func.h conn-ssl.h conn-zip.h hash.h io.h \
|
||||
irc.h irc-channel.h irc-info.h irc-login.h irc-mode.h irc-op.h \
|
||||
irc-oper.h irc-server.h irc-write.h lists.h log.h match.h numeric.h \
|
||||
op.h pam.h parse.h proc.h resolve.h sighandlers.h defines.h messages.h
|
||||
noinst_HEADERS = \
|
||||
ngircd.h \
|
||||
array.h \
|
||||
channel.h \
|
||||
class.h \
|
||||
client.h \
|
||||
client-cap.h \
|
||||
conf.h \
|
||||
conf-ssl.h \
|
||||
conn.h \
|
||||
conn-encoding.h \
|
||||
conn-func.h \
|
||||
conn-ssl.h \
|
||||
conn-zip.h \
|
||||
defines.h \
|
||||
hash.h \
|
||||
io.h \
|
||||
irc.h \
|
||||
irc-cap.h \
|
||||
irc-channel.h \
|
||||
irc-encoding.h \
|
||||
irc-info.h \
|
||||
irc-login.h \
|
||||
irc-macros.h \
|
||||
irc-metadata.h \
|
||||
irc-mode.h \
|
||||
irc-op.h \
|
||||
irc-oper.h \
|
||||
irc-server.h \
|
||||
irc-write.h \
|
||||
lists.h \
|
||||
log.h \
|
||||
login.h \
|
||||
match.h \
|
||||
messages.h \
|
||||
numeric.h \
|
||||
op.h \
|
||||
pam.h \
|
||||
parse.h \
|
||||
proc.h \
|
||||
resolve.h \
|
||||
sighandlers.h
|
||||
|
||||
clean-local:
|
||||
rm -f check-version check-help lint.out
|
||||
|
||||
maintainer-clean-local:
|
||||
rm -f Makefile Makefile.in
|
||||
rm -f Makefile Makefile.in Makefile.am
|
||||
|
||||
check-version: Makefile
|
||||
echo "#!/bin/sh" > check-version
|
||||
@@ -57,7 +129,7 @@ lint:
|
||||
for f in *.c; do \
|
||||
echo "checking $$f ..."; \
|
||||
splint $$f $(LINTARGS) -I$(srcdir) -I$(srcdir)/.. \
|
||||
$(INCLUDES) $(AM_CFLAGS) >lint.out 2>&1; \
|
||||
$(AM_CPPFLAGS) $(AM_CFLAGS) >lint.out 2>&1; \
|
||||
grep "no warnings" lint.out > /dev/null 2>&1; \
|
||||
if [ $$? -ne 0 ]; then \
|
||||
waswarning=1; \
|
@@ -14,16 +14,19 @@
|
||||
* Functions to dynamically allocate arrays.
|
||||
*/
|
||||
|
||||
/* Additionan debug messages related to array handling: 0=off / 1=on */
|
||||
#define DEBUG_ARRAY 0
|
||||
|
||||
#include "array.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "log.h"
|
||||
|
||||
/* Enable more Debug messages in alloc / append / memmove code. */
|
||||
/* #define DEBUG_ARRAY */
|
||||
#if DEBUG_ARRAY
|
||||
# include "log.h"
|
||||
#endif
|
||||
|
||||
#define array_UNUSABLE(x) ( !(x)->mem )
|
||||
|
||||
@@ -64,7 +67,7 @@ array_alloc(array * a, size_t size, size_t pos)
|
||||
return NULL;
|
||||
|
||||
if (a->allocated < alloc) {
|
||||
#ifdef DEBUG_ARRAY
|
||||
#if DEBUG_ARRAY
|
||||
Log(LOG_DEBUG, "array_alloc(): changing size from %u to %u bytes.",
|
||||
a->allocated, alloc);
|
||||
#endif
|
||||
@@ -165,7 +168,7 @@ array_catb(array * dest, const char *src, size_t len)
|
||||
|
||||
assert(ptr != NULL);
|
||||
|
||||
#ifdef DEBUG_ARRAY
|
||||
#if DEBUG_ARRAY
|
||||
Log(LOG_DEBUG,
|
||||
"array_catb(): appending %u bytes to array (now %u bytes in array).",
|
||||
len, tmp);
|
||||
@@ -245,7 +248,7 @@ void
|
||||
array_free(array * a)
|
||||
{
|
||||
assert(a != NULL);
|
||||
#ifdef DEBUG_ARRAY
|
||||
#if DEBUG_ARRAY
|
||||
Log(LOG_DEBUG,
|
||||
"array_free(): %u bytes free'd (%u bytes still used at time of free()).",
|
||||
a->allocated, a->used);
|
||||
@@ -311,7 +314,7 @@ array_moveleft(array * a, size_t membersize, size_t pos)
|
||||
if (!bytepos)
|
||||
return; /* nothing to do */
|
||||
|
||||
#ifdef DEBUG_ARRAY
|
||||
#if DEBUG_ARRAY
|
||||
Log(LOG_DEBUG,
|
||||
"array_moveleft(): %u bytes used in array, starting at position %u.",
|
||||
a->used, bytepos);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* 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
|
||||
@@ -18,41 +18,34 @@
|
||||
* Channel management
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <strings.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "conn-func.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "channel.h"
|
||||
|
||||
#include "imp.h"
|
||||
#include "irc-write.h"
|
||||
#include "conf.h"
|
||||
#include "hash.h"
|
||||
#include "lists.h"
|
||||
#include "log.h"
|
||||
#include "messages.h"
|
||||
#include "match.h"
|
||||
|
||||
#include "exp.h"
|
||||
|
||||
#include "parse.h"
|
||||
#include "irc-mode.h"
|
||||
|
||||
#define REMOVE_PART 0
|
||||
#define REMOVE_QUIT 1
|
||||
#define REMOVE_KICK 2
|
||||
|
||||
|
||||
static CHANNEL *My_Channels;
|
||||
static CL2CHAN *My_Cl2Chan;
|
||||
|
||||
|
||||
static CL2CHAN *Get_Cl2Chan PARAMS(( CHANNEL *Chan, CLIENT *Client ));
|
||||
static CL2CHAN *Add_Client PARAMS(( CHANNEL *Chan, CLIENT *Client ));
|
||||
static bool Remove_Client PARAMS(( int Type, CHANNEL *Chan, CLIENT *Client, CLIENT *Origin, const char *Reason, bool InformServer ));
|
||||
@@ -66,16 +59,8 @@ static void Set_KeyFile PARAMS((CHANNEL *Chan, const char *KeyFile));
|
||||
GLOBAL void
|
||||
Channel_Init( void )
|
||||
{
|
||||
CHANNEL *sc;
|
||||
|
||||
My_Channels = NULL;
|
||||
My_Cl2Chan = NULL;
|
||||
|
||||
sc = Channel_Create("&SERVER");
|
||||
if (sc) {
|
||||
Channel_SetModes(sc, "mnPt");
|
||||
Channel_SetTopic(sc, Client_ThisServer(), "Server Messages");
|
||||
}
|
||||
} /* Channel_Init */
|
||||
|
||||
|
||||
@@ -103,15 +88,18 @@ Channel_GetListInvites(CHANNEL *c)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generate predefined persistent channels and &SERVER
|
||||
*/
|
||||
GLOBAL void
|
||||
Channel_InitPredefined( void )
|
||||
{
|
||||
/* Generate predefined persistent channels */
|
||||
|
||||
CHANNEL *new_chan;
|
||||
REQUEST Req;
|
||||
const struct Conf_Channel *conf_chan;
|
||||
const char *c;
|
||||
size_t i, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan));
|
||||
char *c;
|
||||
char modes[COMMAND_LEN], name[CHANNEL_NAME_LEN];
|
||||
size_t i, n, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan));
|
||||
|
||||
conf_chan = array_start(&Conf_Channels);
|
||||
|
||||
@@ -138,28 +126,80 @@ Channel_InitPredefined( void )
|
||||
|
||||
new_chan = Channel_Create(conf_chan->name);
|
||||
if (!new_chan) {
|
||||
Log(LOG_ERR, "Can't create pre-defined channel \"%s\"",
|
||||
Log(LOG_ERR, "Can't create pre-defined channel \"%s\"!",
|
||||
conf_chan->name);
|
||||
continue;
|
||||
}
|
||||
Log(LOG_INFO, "Created pre-defined channel \"%s\"",
|
||||
conf_chan->name);
|
||||
|
||||
Channel_ModeAdd(new_chan, 'P');
|
||||
|
||||
if (conf_chan->topic[0])
|
||||
Channel_SetTopic(new_chan, NULL, conf_chan->topic);
|
||||
|
||||
c = conf_chan->modes;
|
||||
while (*c)
|
||||
Channel_ModeAdd(new_chan, *c++);
|
||||
/* Evaluate modes strings with fake requests */
|
||||
if (conf_chan->modes_num) {
|
||||
/* Prepare fake request structure */
|
||||
strlcpy(name, conf_chan->name, sizeof(name));
|
||||
Log(LOG_INFO, "Evaluating predefined channel modes for \"%s\".", name);
|
||||
Req.argv[0] = name;
|
||||
Req.prefix = Client_ID(Client_ThisServer());
|
||||
Req.command = "MODE";
|
||||
|
||||
/* Iterate over channel modes strings */
|
||||
for (n = 0; n < conf_chan->modes_num; n++) {
|
||||
Req.argc = 1;
|
||||
strlcpy(modes, conf_chan->modes[n], sizeof(modes));
|
||||
Log(LOG_DEBUG, "Evaluate \"MODE %s %s\".", name, modes);
|
||||
c = strtok(modes, " ");
|
||||
while (c && Req.argc < 15) {
|
||||
Req.argv[Req.argc++] = c;
|
||||
c = strtok(0, " ");
|
||||
}
|
||||
|
||||
if (Req.argc > 1) {
|
||||
/* Handling of legacy "Key" and "MaxUsers" settings:
|
||||
* Enforce setting the respective mode(s), to support
|
||||
* the legacy "Mode = kl" notation, which was valid but
|
||||
* is an invalid MODE string: key and limit are missing!
|
||||
* So set them manually when "k" or "l" are detected in
|
||||
* the first MODE parameter ... */
|
||||
if (Req.argc > 1 && strchr(Req.argv[1], 'k')) {
|
||||
Channel_SetKey(new_chan, conf_chan->key);
|
||||
Channel_ModeAdd(new_chan, 'k');
|
||||
}
|
||||
if (strchr(Req.argv[1], 'l')) {
|
||||
Channel_SetMaxUsers(new_chan, conf_chan->maxusers);
|
||||
Channel_ModeAdd(new_chan, 'l');
|
||||
}
|
||||
|
||||
IRC_MODE(Client_ThisServer(), &Req);
|
||||
}
|
||||
|
||||
/* Original channel modes srings are no longer needed */
|
||||
free(conf_chan->modes[n]);
|
||||
}
|
||||
}
|
||||
|
||||
Channel_SetKey(new_chan, conf_chan->key);
|
||||
Channel_SetMaxUsers(new_chan, conf_chan->maxusers);
|
||||
Set_KeyFile(new_chan, conf_chan->keyfile);
|
||||
|
||||
Log(LOG_INFO,
|
||||
"Created pre-defined channel \"%s\", mode \"%s\" (key \"%s\", limit %d).",
|
||||
new_chan->name, new_chan->modes, new_chan->key,
|
||||
new_chan->maxusers);
|
||||
}
|
||||
if (channel_count)
|
||||
array_free(&Conf_Channels);
|
||||
|
||||
/* Make sure the local &SERVER channel exists */
|
||||
if (!Channel_Search("&SERVER")) {
|
||||
new_chan = Channel_Create("&SERVER");
|
||||
if (new_chan) {
|
||||
Channel_SetModes(new_chan, "mnPt");
|
||||
Channel_SetTopic(new_chan, Client_ThisServer(),
|
||||
"Server Messages");
|
||||
} else
|
||||
Log(LOG_ERR, "Failed to create \"&SERVER\" channel!");
|
||||
} else
|
||||
LogDebug("Required channel \"&SERVER\" already exists, ok.");
|
||||
} /* Channel_InitPredefined */
|
||||
|
||||
|
||||
@@ -218,7 +258,7 @@ Channel_Join( CLIENT *Client, const char *Name )
|
||||
|
||||
/* Check that the channel name is valid */
|
||||
if (! Channel_IsValidName(Name)) {
|
||||
IRC_WriteStrClient(Client, ERR_NOSUCHCHANNEL_MSG,
|
||||
IRC_WriteErrClient(Client, ERR_NOSUCHCHANNEL_MSG,
|
||||
Client_ID(Client), Name);
|
||||
return false;
|
||||
}
|
||||
@@ -263,14 +303,14 @@ Channel_Part(CLIENT * Client, CLIENT * Origin, const char *Name, const char *Rea
|
||||
/* Check that specified channel exists */
|
||||
chan = Channel_Search(Name);
|
||||
if (!chan) {
|
||||
IRC_WriteStrClient(Client, ERR_NOSUCHCHANNEL_MSG,
|
||||
IRC_WriteErrClient(Client, ERR_NOSUCHCHANNEL_MSG,
|
||||
Client_ID(Client), Name);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check that the client is in the channel */
|
||||
if (!Get_Cl2Chan(chan, Client)) {
|
||||
IRC_WriteStrClient(Client, ERR_NOTONCHANNEL_MSG,
|
||||
IRC_WriteErrClient(Client, ERR_NOTONCHANNEL_MSG,
|
||||
Client_ID(Client), Name);
|
||||
return false;
|
||||
}
|
||||
@@ -294,6 +334,7 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name,
|
||||
const char *Reason )
|
||||
{
|
||||
CHANNEL *chan;
|
||||
bool can_kick = false;
|
||||
|
||||
assert(Peer != NULL);
|
||||
assert(Target != NULL);
|
||||
@@ -303,9 +344,9 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name,
|
||||
|
||||
/* Check that channel exists */
|
||||
chan = Channel_Search( Name );
|
||||
if( ! chan )
|
||||
{
|
||||
IRC_WriteStrClient( Origin, ERR_NOSUCHCHANNEL_MSG, Client_ID( Origin ), Name );
|
||||
if (!chan) {
|
||||
IRC_WriteErrClient(Origin, ERR_NOSUCHCHANNEL_MSG,
|
||||
Client_ID(Origin), Name);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -313,14 +354,7 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name,
|
||||
Client_Type(Origin) != CLIENT_SERVICE) {
|
||||
/* Check that user is on the specified channel */
|
||||
if (!Channel_IsMemberOf(chan, Origin)) {
|
||||
IRC_WriteStrClient( Origin, ERR_NOTONCHANNEL_MSG,
|
||||
Client_ID(Origin), Name);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check if user has operator status */
|
||||
if (!strchr(Channel_UserModes(chan, Origin), 'o')) {
|
||||
IRC_WriteStrClient(Origin, ERR_CHANOPRIVSNEEDED_MSG,
|
||||
IRC_WriteErrClient(Origin, ERR_NOTONCHANNEL_MSG,
|
||||
Client_ID(Origin), Name);
|
||||
return;
|
||||
}
|
||||
@@ -328,11 +362,60 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name,
|
||||
|
||||
/* Check that the client to be kicked is on the specified channel */
|
||||
if (!Channel_IsMemberOf(chan, Target)) {
|
||||
IRC_WriteStrClient(Origin, ERR_USERNOTINCHANNEL_MSG,
|
||||
IRC_WriteErrClient(Origin, ERR_USERNOTINCHANNEL_MSG,
|
||||
Client_ID(Origin), Client_ID(Target), Name );
|
||||
return;
|
||||
}
|
||||
|
||||
if(Client_Type(Peer) == CLIENT_USER) {
|
||||
/* Channel mode 'Q' and user mode 'q' on target: nobody but
|
||||
* IRC Operators and servers can kick the target user */
|
||||
if ((Channel_HasMode(chan, 'Q')
|
||||
|| Client_HasMode(Target, 'q')
|
||||
|| Client_Type(Target) == CLIENT_SERVICE)
|
||||
&& !Client_HasMode(Origin, 'o')) {
|
||||
IRC_WriteErrClient(Origin, ERR_KICKDENY_MSG,
|
||||
Client_ID(Origin), Name,
|
||||
Client_ID(Target));
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check if client has the rights to kick target */
|
||||
|
||||
/* Owner can kick everyone */
|
||||
if (Channel_UserHasMode(chan, Peer, 'q'))
|
||||
can_kick = true;
|
||||
|
||||
/* Admin can't kick owner */
|
||||
else if (Channel_UserHasMode(chan, Peer, 'a') &&
|
||||
!Channel_UserHasMode(chan, Target, 'q'))
|
||||
can_kick = true;
|
||||
|
||||
/* Op can't kick owner | admin */
|
||||
else if (Channel_UserHasMode(chan, Peer, 'o') &&
|
||||
!Channel_UserHasMode(chan, Target, 'q') &&
|
||||
!Channel_UserHasMode(chan, Target, 'a'))
|
||||
can_kick = true;
|
||||
|
||||
/* Half Op can't kick owner | admin | op */
|
||||
else if (Channel_UserHasMode(chan, Peer, 'h') &&
|
||||
!Channel_UserHasMode(chan, Target, 'q') &&
|
||||
!Channel_UserHasMode(chan, Target, 'a') &&
|
||||
!Channel_UserHasMode(chan, Target, 'o'))
|
||||
can_kick = true;
|
||||
|
||||
/* IRC operators & IRCd with OperCanMode enabled
|
||||
* can kick anyways regardless of privilege */
|
||||
else if(Client_HasMode(Origin, 'o') && Conf_OperCanMode)
|
||||
can_kick = true;
|
||||
|
||||
if(!can_kick) {
|
||||
IRC_WriteErrClient(Origin, ERR_CHANOPPRIVTOOLOW_MSG,
|
||||
Client_ID(Origin), Name);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Kick Client from channel */
|
||||
Remove_Client( REMOVE_KICK, chan, Target, Origin, Reason, true);
|
||||
} /* Channel_Kick */
|
||||
@@ -377,7 +460,7 @@ Channel_CountVisible (CLIENT *Client)
|
||||
c = My_Channels;
|
||||
while(c) {
|
||||
if (Client) {
|
||||
if (!strchr(Channel_Modes(c), 's')
|
||||
if (!Channel_HasMode(c, 's')
|
||||
|| Channel_IsMemberOf(c, Client))
|
||||
count++;
|
||||
} else
|
||||
@@ -443,6 +526,14 @@ Channel_Modes( CHANNEL *Chan )
|
||||
} /* Channel_Modes */
|
||||
|
||||
|
||||
GLOBAL bool
|
||||
Channel_HasMode( CHANNEL *Chan, char Mode )
|
||||
{
|
||||
assert( Chan != NULL );
|
||||
return strchr( Chan->modes, Mode ) != NULL;
|
||||
} /* Channel_HasMode */
|
||||
|
||||
|
||||
GLOBAL char *
|
||||
Channel_Key( CHANNEL *Chan )
|
||||
{
|
||||
@@ -580,7 +671,7 @@ Channel_ModeAdd( CHANNEL *Chan, char Mode )
|
||||
assert( Chan != NULL );
|
||||
|
||||
x[0] = Mode; x[1] = '\0';
|
||||
if( ! strchr( Chan->modes, x[0] ))
|
||||
if( ! Channel_HasMode( Chan, x[0] ))
|
||||
{
|
||||
/* Channel does not have this mode yet, set it */
|
||||
strlcat( Chan->modes, x, sizeof( Chan->modes ));
|
||||
@@ -689,6 +780,13 @@ Channel_UserModes( CHANNEL *Chan, CLIENT *Client )
|
||||
} /* Channel_UserModes */
|
||||
|
||||
|
||||
GLOBAL bool
|
||||
Channel_UserHasMode( CHANNEL *Chan, CLIENT *Client, char Mode )
|
||||
{
|
||||
return strchr(Channel_UserModes(Chan, Client), Mode) != NULL;
|
||||
} /* Channel_UserHasMode */
|
||||
|
||||
|
||||
GLOBAL bool
|
||||
Channel_IsMemberOf( CHANNEL *Chan, CLIENT *Client )
|
||||
{
|
||||
@@ -807,9 +905,9 @@ Channel_SetMaxUsers(CHANNEL *Chan, unsigned long Count)
|
||||
static bool
|
||||
Can_Send_To_Channel(CHANNEL *Chan, CLIENT *From)
|
||||
{
|
||||
bool is_member, has_voice, is_op;
|
||||
bool is_member, has_voice, is_halfop, is_op, is_chanadmin, is_owner;
|
||||
|
||||
is_member = has_voice = is_op = false;
|
||||
is_member = has_voice = is_halfop = is_op = is_chanadmin = is_owner = false;
|
||||
|
||||
/* The server itself always can send messages :-) */
|
||||
if (Client_ThisServer() == From)
|
||||
@@ -817,10 +915,16 @@ Can_Send_To_Channel(CHANNEL *Chan, CLIENT *From)
|
||||
|
||||
if (Channel_IsMemberOf(Chan, From)) {
|
||||
is_member = true;
|
||||
if (strchr(Channel_UserModes(Chan, From), 'v'))
|
||||
if (Channel_UserHasMode(Chan, From, 'v'))
|
||||
has_voice = true;
|
||||
if (strchr(Channel_UserModes(Chan, From), 'o'))
|
||||
if (Channel_UserHasMode(Chan, From, 'h'))
|
||||
is_halfop = true;
|
||||
if (Channel_UserHasMode(Chan, From, 'o'))
|
||||
is_op = true;
|
||||
if (Channel_UserHasMode(Chan, From, 'a'))
|
||||
is_chanadmin = true;
|
||||
if (Channel_UserHasMode(Chan, From, 'q'))
|
||||
is_owner = true;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -829,13 +933,17 @@ Can_Send_To_Channel(CHANNEL *Chan, CLIENT *From)
|
||||
* If channel mode n set: non-members cannot send to channel.
|
||||
* If channel mode m set: need voice.
|
||||
*/
|
||||
if (strchr(Channel_Modes(Chan), 'n') && !is_member)
|
||||
if (Channel_HasMode(Chan, 'n') && !is_member)
|
||||
return false;
|
||||
|
||||
if (is_op || has_voice)
|
||||
if (Channel_HasMode(Chan, 'M') && !Client_HasMode(From, 'R')
|
||||
&& !Client_HasMode(From, 'o'))
|
||||
return false;
|
||||
|
||||
if (has_voice || is_halfop || is_op || is_chanadmin || is_owner)
|
||||
return true;
|
||||
|
||||
if (strchr(Channel_Modes(Chan), 'm'))
|
||||
if (Channel_HasMode(Chan, 'm'))
|
||||
return false;
|
||||
|
||||
if (Lists_Check(&Chan->list_excepts, From))
|
||||
@@ -852,15 +960,20 @@ Channel_Write(CHANNEL *Chan, CLIENT *From, CLIENT *Client, const char *Command,
|
||||
if (!Can_Send_To_Channel(Chan, From)) {
|
||||
if (! SendErrors)
|
||||
return CONNECTED; /* no error, see RFC 2812 */
|
||||
return IRC_WriteStrClient(From, ERR_CANNOTSENDTOCHAN_MSG,
|
||||
if (Channel_HasMode(Chan, 'M'))
|
||||
return IRC_WriteErrClient(From, ERR_NEEDREGGEDNICK_MSG,
|
||||
Client_ID(From), Channel_Name(Chan));
|
||||
else
|
||||
return IRC_WriteErrClient(From, ERR_CANNOTSENDTOCHAN_MSG,
|
||||
Client_ID(From), Channel_Name(Chan));
|
||||
}
|
||||
|
||||
if (Client_Conn(From) > NONE)
|
||||
Conn_UpdateIdle(Client_Conn(From));
|
||||
|
||||
return IRC_WriteStrChannelPrefix(Client, Chan, From, true,
|
||||
"%s %s :%s", Command, Channel_Name(Chan), Text);
|
||||
IRC_WriteStrChannelPrefix(Client, Chan, From, true, "%s %s :%s",
|
||||
Command, Channel_Name(Chan), Text);
|
||||
return CONNECTED;
|
||||
}
|
||||
|
||||
|
||||
@@ -975,7 +1088,7 @@ Remove_Client( int Type, CHANNEL *Chan, CLIENT *Client, CLIENT *Origin, const ch
|
||||
switch( Type )
|
||||
{
|
||||
case REMOVE_QUIT:
|
||||
/* QUIT: other servers have already been notified,
|
||||
/* QUIT: other servers have already been notified,
|
||||
* see Client_Destroy(); so only inform other clients
|
||||
* in same channel. */
|
||||
assert( InformServer == false );
|
||||
@@ -1019,7 +1132,7 @@ Remove_Client( int Type, CHANNEL *Chan, CLIENT *Client, CLIENT *Origin, const ch
|
||||
}
|
||||
|
||||
/* When channel is empty and is not pre-defined, delete */
|
||||
if( ! strchr( Channel_Modes( Chan ), 'P' ))
|
||||
if( ! Channel_HasMode( Chan, 'P' ))
|
||||
{
|
||||
if( ! Get_First_Cl2Chan( NULL, Chan )) Delete_Channel( Chan );
|
||||
}
|
||||
@@ -1029,29 +1142,29 @@ Remove_Client( int Type, CHANNEL *Chan, CLIENT *Client, CLIENT *Origin, const ch
|
||||
|
||||
|
||||
GLOBAL bool
|
||||
Channel_AddBan(CHANNEL *c, const char *mask )
|
||||
Channel_AddBan(CHANNEL *c, const char *mask, const char *who )
|
||||
{
|
||||
struct list_head *h = Channel_GetListBans(c);
|
||||
LogDebug("Adding \"%s\" to \"%s\" ban list", mask, Channel_Name(c));
|
||||
return Lists_Add(h, mask, false, NULL);
|
||||
return Lists_Add(h, mask, time(NULL), who, false);
|
||||
}
|
||||
|
||||
|
||||
GLOBAL bool
|
||||
Channel_AddExcept(CHANNEL *c, const char *mask )
|
||||
Channel_AddExcept(CHANNEL *c, const char *mask, const char *who )
|
||||
{
|
||||
struct list_head *h = Channel_GetListExcepts(c);
|
||||
LogDebug("Adding \"%s\" to \"%s\" exception list", mask, Channel_Name(c));
|
||||
return Lists_Add(h, mask, false, NULL);
|
||||
return Lists_Add(h, mask, time(NULL), who, false);
|
||||
}
|
||||
|
||||
|
||||
GLOBAL bool
|
||||
Channel_AddInvite(CHANNEL *c, const char *mask, bool onlyonce)
|
||||
Channel_AddInvite(CHANNEL *c, const char *mask, bool onlyonce, const char *who )
|
||||
{
|
||||
struct list_head *h = Channel_GetListInvites(c);
|
||||
LogDebug("Adding \"%s\" to \"%s\" invite list", mask, Channel_Name(c));
|
||||
return Lists_Add(h, mask, onlyonce, NULL);
|
||||
return Lists_Add(h, mask, time(NULL), who, onlyonce);
|
||||
}
|
||||
|
||||
|
||||
@@ -1068,7 +1181,9 @@ ShowChannelList(struct list_head *head, CLIENT *Client, CHANNEL *Channel,
|
||||
while (e) {
|
||||
if (!IRC_WriteStrClient(Client, msg, Client_ID(Client),
|
||||
Channel_Name(Channel),
|
||||
Lists_GetMask(e)))
|
||||
Lists_GetMask(e),
|
||||
Lists_GetReason(e),
|
||||
Lists_GetValidity(e)))
|
||||
return DISCONNECTED;
|
||||
e = Lists_GetNext(e);
|
||||
}
|
||||
@@ -1147,7 +1262,7 @@ Channel_CheckKey(CHANNEL *Chan, CLIENT *Client, const char *Key)
|
||||
assert(Client != NULL);
|
||||
assert(Key != NULL);
|
||||
|
||||
if (!strchr(Chan->modes, 'k'))
|
||||
if (!Channel_HasMode(Chan, 'k'))
|
||||
return true;
|
||||
if (*Key == '\0')
|
||||
return false;
|
||||
@@ -1187,64 +1302,6 @@ Channel_CheckKey(CHANNEL *Chan, CLIENT *Client, const char *Key)
|
||||
} /* Channel_CheckKey */
|
||||
|
||||
|
||||
/**
|
||||
* Check wether a client is allowed to administer a channel or not.
|
||||
*
|
||||
* @param Chan The channel to test.
|
||||
* @param Client The client from which the command has been received.
|
||||
* @param Origin The originator of the command (or NULL).
|
||||
* @param OnChannel Set to true if the originator is member of the channel.
|
||||
* @param AdminOk Set to true if the client is allowed to do
|
||||
* administrative tasks on this channel.
|
||||
* @param UseServerMode Set to true if ngIRCd should emulate "server mode",
|
||||
* that is send commands as if originating from a server
|
||||
* and not the originator of the command.
|
||||
*/
|
||||
GLOBAL void
|
||||
Channel_CheckAdminRights(CHANNEL *Chan, CLIENT *Client, CLIENT *Origin,
|
||||
bool *OnChannel, bool *AdminOk, bool *UseServerMode)
|
||||
{
|
||||
assert (Chan != NULL);
|
||||
assert (Client != NULL);
|
||||
assert (OnChannel != NULL);
|
||||
assert (AdminOk != NULL);
|
||||
assert (UseServerMode != NULL);
|
||||
|
||||
/* Use the client as origin, if no origin has been given (no prefix?) */
|
||||
if (!Origin)
|
||||
Origin = Client;
|
||||
|
||||
*OnChannel = false;
|
||||
*AdminOk = false;
|
||||
*UseServerMode = false;
|
||||
|
||||
if (Client_Type(Client) != CLIENT_USER
|
||||
&& Client_Type(Client) != CLIENT_SERVER
|
||||
&& Client_Type(Client) != CLIENT_SERVICE)
|
||||
return;
|
||||
|
||||
/* Allow channel administration if the client is a server or service */
|
||||
if (Client_Type(Client) != CLIENT_USER) {
|
||||
*AdminOk = true;
|
||||
return;
|
||||
}
|
||||
|
||||
*OnChannel = Channel_IsMemberOf(Chan, Origin);
|
||||
|
||||
if (*OnChannel && strchr(Channel_UserModes(Chan, Origin), 'o')) {
|
||||
/* User is a channel operator */
|
||||
*AdminOk = true;
|
||||
} else if (Conf_OperCanMode) {
|
||||
/* IRC operators are allowed to administer channels as well */
|
||||
if (Client_OperByMe(Origin)) {
|
||||
*AdminOk = true;
|
||||
if (Conf_OperServerMode)
|
||||
*UseServerMode = true;
|
||||
}
|
||||
}
|
||||
} /* Channel_CheckAdminRights */
|
||||
|
||||
|
||||
static CL2CHAN *
|
||||
Get_First_Cl2Chan( CLIENT *Client, CHANNEL *Chan )
|
||||
{
|
||||
|
@@ -79,7 +79,6 @@ GLOBAL unsigned long Channel_MemberCount PARAMS(( CHANNEL *Chan ));
|
||||
GLOBAL int Channel_CountForUser PARAMS(( CLIENT *Client ));
|
||||
|
||||
GLOBAL const char *Channel_Name PARAMS(( const CHANNEL *Chan ));
|
||||
GLOBAL char *Channel_Modes PARAMS(( CHANNEL *Chan ));
|
||||
GLOBAL char *Channel_Topic PARAMS(( CHANNEL *Chan ));
|
||||
GLOBAL char *Channel_Key PARAMS(( CHANNEL *Chan ));
|
||||
GLOBAL unsigned long Channel_MaxUsers PARAMS(( CHANNEL *Chan ));
|
||||
@@ -106,9 +105,12 @@ GLOBAL bool Channel_IsValidName PARAMS(( const char *Name ));
|
||||
|
||||
GLOBAL bool Channel_ModeAdd PARAMS(( CHANNEL *Chan, char Mode ));
|
||||
GLOBAL bool Channel_ModeDel PARAMS(( CHANNEL *Chan, char Mode ));
|
||||
GLOBAL bool Channel_HasMode PARAMS(( CHANNEL *Chan, char Mode ));
|
||||
GLOBAL char *Channel_Modes PARAMS(( CHANNEL *Chan ));
|
||||
|
||||
GLOBAL bool Channel_UserModeAdd PARAMS(( CHANNEL *Chan, CLIENT *Client, char Mode ));
|
||||
GLOBAL bool Channel_UserModeDel PARAMS(( CHANNEL *Chan, CLIENT *Client, char Mode ));
|
||||
GLOBAL bool Channel_UserHasMode PARAMS(( CHANNEL *Chan, CLIENT *Client, char Mode ));
|
||||
GLOBAL char *Channel_UserModes PARAMS(( CHANNEL *Chan, CLIENT *Client ));
|
||||
|
||||
GLOBAL bool Channel_IsMemberOf PARAMS(( CHANNEL *Chan, CLIENT *Client ));
|
||||
@@ -125,10 +127,10 @@ GLOBAL char *Channel_TopicWho PARAMS(( CHANNEL *Chan ));
|
||||
GLOBAL unsigned int Channel_CreationTime PARAMS(( CHANNEL *Chan ));
|
||||
#endif
|
||||
|
||||
GLOBAL bool Channel_AddBan PARAMS((CHANNEL *c, const char *Mask));
|
||||
GLOBAL bool Channel_AddExcept PARAMS((CHANNEL *c, const char *Mask));
|
||||
GLOBAL bool Channel_AddBan PARAMS((CHANNEL *c, const char *Mask, const char *who));
|
||||
GLOBAL bool Channel_AddExcept PARAMS((CHANNEL *c, const char *Mask, const char *who));
|
||||
GLOBAL bool Channel_AddInvite PARAMS((CHANNEL *c, const char *Mask,
|
||||
bool OnlyOnce));
|
||||
bool OnlyOnce, const char *who));
|
||||
|
||||
GLOBAL bool Channel_ShowBans PARAMS((CLIENT *client, CHANNEL *c));
|
||||
GLOBAL bool Channel_ShowExcepts PARAMS((CLIENT *client, CHANNEL *c));
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* 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
|
||||
@@ -16,25 +16,17 @@
|
||||
* User class management.
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "array.h"
|
||||
#include "conn.h"
|
||||
#include "client.h"
|
||||
#include "lists.h"
|
||||
#include "match.h"
|
||||
#include "stdio.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "class.h"
|
||||
|
||||
struct list_head My_Classes[CLASS_COUNT];
|
||||
|
||||
char Reject_Reason[COMMAND_LEN];
|
||||
|
||||
GLOBAL void
|
||||
Class_Init(void)
|
||||
{
|
||||
@@ -49,32 +41,31 @@ Class_Exit(void)
|
||||
for (i = 0; i < CLASS_COUNT; Lists_Free(&My_Classes[i++]));
|
||||
}
|
||||
|
||||
GLOBAL char *
|
||||
Class_GetMemberReason(const int Class, CLIENT *Client)
|
||||
GLOBAL bool
|
||||
Class_GetMemberReason(const int Class, CLIENT *Client, char *reason, size_t len)
|
||||
{
|
||||
char *reason;
|
||||
char str[COMMAND_LEN];
|
||||
|
||||
assert(Class < CLASS_COUNT);
|
||||
assert(Client != NULL);
|
||||
|
||||
reason = Lists_CheckReason(&My_Classes[Class], Client);
|
||||
if (!reason)
|
||||
return NULL;
|
||||
strlcpy(str, "listed", sizeof(str));
|
||||
|
||||
if (!*reason)
|
||||
reason = "listed";
|
||||
if (!Lists_CheckReason(&My_Classes[Class], Client, str, sizeof(str)))
|
||||
return false;
|
||||
|
||||
switch(Class) {
|
||||
case CLASS_GLINE:
|
||||
snprintf(Reject_Reason, sizeof(Reject_Reason),
|
||||
"\"%s\" (G-Line)", reason);
|
||||
return Reject_Reason;
|
||||
snprintf(reason, len, "\"%s\" (G-Line)", str);
|
||||
break;
|
||||
case CLASS_KLINE:
|
||||
snprintf(Reject_Reason, sizeof(Reject_Reason),
|
||||
"\"%s\" (K-Line)", reason);
|
||||
return Reject_Reason;
|
||||
snprintf(reason, len, "\"%s\" (K-Line)", str);
|
||||
break;
|
||||
default:
|
||||
snprintf(reason, len, "%s", str);
|
||||
break;
|
||||
}
|
||||
return reason;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -88,15 +79,13 @@ Class_GetMemberReason(const int Class, CLIENT *Client)
|
||||
GLOBAL bool
|
||||
Class_HandleServerBans(CLIENT *Client)
|
||||
{
|
||||
char *rejectptr;
|
||||
char reject[COMMAND_LEN];
|
||||
|
||||
assert(Client != NULL);
|
||||
|
||||
rejectptr = Class_GetMemberReason(CLASS_GLINE, Client);
|
||||
if (!rejectptr)
|
||||
rejectptr = Class_GetMemberReason(CLASS_KLINE, Client);
|
||||
if (rejectptr) {
|
||||
Client_Reject(Client, rejectptr, true);
|
||||
if (Class_GetMemberReason(CLASS_GLINE, Client, reject, sizeof(reject)) ||
|
||||
Class_GetMemberReason(CLASS_KLINE, Client, reject, sizeof(reject))) {
|
||||
Client_Reject(Client, reject, true);
|
||||
return DISCONNECTED;
|
||||
}
|
||||
|
||||
@@ -105,24 +94,30 @@ Class_HandleServerBans(CLIENT *Client)
|
||||
|
||||
|
||||
GLOBAL bool
|
||||
Class_AddMask(const int Class, const char *Mask, time_t ValidUntil,
|
||||
Class_AddMask(const int Class, const char *Pattern, time_t ValidUntil,
|
||||
const char *Reason)
|
||||
{
|
||||
char mask[MASK_LEN];
|
||||
|
||||
assert(Class < CLASS_COUNT);
|
||||
assert(Mask != NULL);
|
||||
assert(Pattern != NULL);
|
||||
assert(Reason != NULL);
|
||||
|
||||
return Lists_Add(&My_Classes[Class], Lists_MakeMask(Mask),
|
||||
ValidUntil, Reason);
|
||||
Lists_MakeMask(Pattern, mask, sizeof(mask));
|
||||
return Lists_Add(&My_Classes[Class], mask,
|
||||
ValidUntil, Reason, false);
|
||||
}
|
||||
|
||||
GLOBAL void
|
||||
Class_DeleteMask(const int Class, const char *Mask)
|
||||
Class_DeleteMask(const int Class, const char *Pattern)
|
||||
{
|
||||
assert(Class < CLASS_COUNT);
|
||||
assert(Mask != NULL);
|
||||
char mask[MASK_LEN];
|
||||
|
||||
Lists_Del(&My_Classes[Class], Lists_MakeMask(Mask));
|
||||
assert(Class < CLASS_COUNT);
|
||||
assert(Pattern != NULL);
|
||||
|
||||
Lists_MakeMask(Pattern, mask, sizeof(mask));
|
||||
Lists_Del(&My_Classes[Class], mask);
|
||||
}
|
||||
|
||||
GLOBAL struct list_head *
|
||||
|
@@ -25,11 +25,12 @@
|
||||
GLOBAL void Class_Init PARAMS((void));
|
||||
GLOBAL void Class_Exit PARAMS((void));
|
||||
|
||||
GLOBAL bool Class_AddMask PARAMS((const int Class, const char *Mask,
|
||||
GLOBAL bool Class_AddMask PARAMS((const int Class, const char *Pattern,
|
||||
const time_t ValidUntil, const char *Reason));
|
||||
GLOBAL void Class_DeleteMask PARAMS((const int Class, const char *Mask));
|
||||
GLOBAL void Class_DeleteMask PARAMS((const int Class, const char *Pattern));
|
||||
|
||||
GLOBAL char *Class_GetMemberReason PARAMS((const int Class, CLIENT *Client));
|
||||
GLOBAL bool Class_GetMemberReason PARAMS((const int Class, CLIENT *Client,
|
||||
char *reason, size_t len));
|
||||
GLOBAL bool Class_HandleServerBans PARAMS((CLIENT *Client));
|
||||
|
||||
GLOBAL struct list_head *Class_GetList PARAMS((const int Class));
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user