mirror of
https://github.com/osmarks/ngircd.git
synced 2025-09-24 21:14:05 +00:00
Compare commits
148 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
71ae2b7d7f | ||
![]() |
65558a46e5 | ||
![]() |
afb17ff08e | ||
![]() |
cbd8e5b5d6 | ||
![]() |
dc832cd348 | ||
![]() |
2ff76d7f48 | ||
![]() |
f3c89af845 | ||
![]() |
d777ce6600 | ||
![]() |
5ccdb26885 | ||
![]() |
c7781cf7ef | ||
![]() |
2056de82ae | ||
![]() |
5cf0eabd84 | ||
![]() |
6e382889a3 | ||
![]() |
e699325fd0 | ||
![]() |
0ae158a492 | ||
![]() |
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 |
13
.gitignore
vendored
13
.gitignore
vendored
@@ -23,7 +23,9 @@ depcomp
|
||||
install-sh
|
||||
missing
|
||||
ngircd.dest
|
||||
.*.swp
|
||||
.deps
|
||||
.vscode
|
||||
*.a
|
||||
*.o
|
||||
doc/sample-ngircd.conf
|
||||
@@ -42,7 +44,11 @@ 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
|
||||
@@ -54,13 +60,20 @@ 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
|
||||
|
8
.mailmap
8
.mailmap
@@ -6,9 +6,17 @@ Alexander Barton <alex@barton.de> <alex@kfreebsd.barton.de>
|
||||
|
||||
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>
|
||||
|
@@ -1,5 +1,4 @@
|
||||
language: c
|
||||
sudo: false
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
|
21
AUTHORS
21
AUTHORS
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2017 Alexander Barton and Contributors.
|
||||
(c)2001-2021 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -13,7 +13,7 @@ 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: <irc://irc.barton.de/ngircd>.
|
||||
channel "#ngircd" on irc.barton.de: <irc://irc.barton.de/ngircd>.
|
||||
|
||||
Don't mail the people listed here directly, if possible!
|
||||
|
||||
@@ -29,6 +29,7 @@ Contributors
|
||||
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>
|
||||
@@ -39,27 +40,39 @@ 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>
|
||||
Goetz Hoffart <goetz@hoffart.de>
|
||||
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>
|
||||
Yecheng Fu <cofyc.jackson@gmail.com>
|
||||
Windree <57554809+Windree@users.noreply.github.com>
|
||||
xnaas <8271327+xnaas@users.noreply.github.com>
|
||||
xor <xorboy@gmail.com>
|
||||
Yecheng Fu <cofyc.jackson@gmail.com>
|
||||
|
||||
|
||||
Code snippets
|
||||
|
231
ChangeLog
231
ChangeLog
@@ -2,12 +2,237 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2017 Alexander Barton and Contributors.
|
||||
(c)2001-2021 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- ChangeLog --
|
||||
|
||||
ngIRCd 26.1 (2021-01-02)
|
||||
|
||||
- Fix a "format string" compiler warning (detected on OpenBSD).
|
||||
- No longer set "AI_ADDRCONFIG" when resolving host names, even when it
|
||||
exists: with this option set, on an IPv6-only host, we prevent 127.0.0.1
|
||||
to get translated properly, even when the loopback interface has this
|
||||
address configured! And as the test suite uses 127.0.0.1, it was broken
|
||||
on IPv6-only hosts.
|
||||
The drawback is that the resolver possibly returns more addresses now,
|
||||
even of an unsupported/not connected address family; but this shouldn't
|
||||
do much harm in practice, as ngIRCd iterates over all returned addresses
|
||||
while trying to establish an outgoing connection.
|
||||
Closes #281.
|
||||
- Revert "Show allowed channel types in ISUPPORT(005) numeric only", which
|
||||
was introduced in 26~rc1: This lead to some IRC clients assuming "oh, no
|
||||
channel prefix characters at all, so no channels at all, so no PRIVMSG can
|
||||
go to any channel" when "AllowedChannelTypes" was set to the empty string
|
||||
("") -- which is not the case when there are pre-defined channel set up or
|
||||
other servers still having channels!
|
||||
So "allowed channel types" != "supported channel types", and we always have
|
||||
to list all supported ones in the ISUPPORT(005) numeric!
|
||||
Closes #285.
|
||||
- Test suite: Wait 2 seconds after reloading the daemon, which is required
|
||||
because on reload, all listening ports are closed, configuration updated,
|
||||
and then opened again. This lead to subsequent tests running while the
|
||||
daemon isn't listening on any ports, and that's why some tests could fail.
|
||||
Closes #280.
|
||||
- platformtest.sh: Try to mangle CLang name more intelligently.
|
||||
- Documentation: Fixed URLs of Atheme IRC services, updated all mentions
|
||||
from CVS to Git, and updated Platforms.txt -- Oh, and it is 2021 now! ;-)
|
||||
|
||||
ngIRCd 26 (2020-06-20)
|
||||
|
||||
ngIRCd 26~rc2 (2020-06-11)
|
||||
- Add AppStream metadata file (contrib/de.barton.ngircd.metainfo.xml).
|
||||
- Don't send invalid CHANINFO commands when a channel has mode +k set but no
|
||||
key is known to the server. This can happen with a misconfigured predefined
|
||||
channel, for example, and looked like this: "CHANINFO #test +Pk 0 :" --
|
||||
note the unset key represented by the two spaces. Fix this by sending a
|
||||
"*" in this case and update the CHANINFO documentation, too.
|
||||
- ngircd.spec: Fix names of README.md and INSTALL.md, add ".md" extension.
|
||||
- Update description texts in the README.md file, the RPM and Debian package
|
||||
files and the manual page: bring them in line with the updated homepage.
|
||||
- Server-Server protocol: Fix use-after-free when unregistering a directly
|
||||
connected server sending a SQUIT for itself.
|
||||
- Server-Server protocol: Detect bogus SERVER commands lacking a prefix.
|
||||
Thanks Hilko Bengen (hillu) for finding & reporting this as well for the
|
||||
patch & pull request (even if fixed differently).
|
||||
Closes #275.
|
||||
- Fix the PING-PONG logic: In ngIRCd 26~rc1 this was completely broken (while
|
||||
trying to fix timeouts during server handshakes in bigger networks): the
|
||||
daemon never disconnected any stale peers but kept sending out PINGs over
|
||||
and over again ...
|
||||
- Test suite: Add missing files needed to test SSL support to "EXTRA_DIST",
|
||||
so that they are included in distribution archives: in rc1, "make check"
|
||||
fails when using sources from an archive and enabling SSL support.
|
||||
Thanks to Hilko Bengen <bengen@hilluzination.de> for the patch!
|
||||
|
||||
ngIRCd 26~rc1 (2020-05-10)
|
||||
- Tweak & update doc/HowToRelease.txt, .mailmap and AUTHORS files.
|
||||
- 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).
|
||||
- Update Travis-CI configuration, "sudo" is deprecated.
|
||||
- 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.
|
||||
- Makefile.am: Replace "make" with "${MAKE}". This fixes warnings like this:
|
||||
"warning: jobserver unavailable: using -j1. Add `+' to parent make rule."
|
||||
Thanks to Sam James (sam_c) <sam@cmpct.info>!
|
||||
Closes #270.
|
||||
- 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>!
|
||||
- Remove deprecated legacy configuration options and related functions that
|
||||
have been marked for removal for quite some time:
|
||||
- PredefChannelsOnly (v22)
|
||||
- NoticeAuth (v24)
|
||||
- NoXXX (v19)
|
||||
- Old '[GLOBAL]' section handling (v19)
|
||||
Thanks to Michi <michi+ngircd@dataswamp.org> for the patch!
|
||||
- Fix recursion bug on write errors: Depending on the stack size, too many
|
||||
clients on the same channel quitting at the same time would trigger a crash
|
||||
due to too many recursive calls to Conn_Close(). Thanks to Michi
|
||||
<michi+ngircd@dataswamp.org> for the patch!
|
||||
- Fix builds using GCC option -fno-common, which is the default starting with
|
||||
GCC 10. Thanks to Michi <michi+ngircd@dataswamp.org> for the patch!
|
||||
Closes #266.
|
||||
- Convert INSTALL and README files to Markdown.
|
||||
- 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.
|
||||
- Reuse old SSL key if loading a new one failed.
|
||||
- Remove outdated OpenBSD/NetBSD systrace.policy.
|
||||
- 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>.
|
||||
- Fix and update Xcode project: Reference correct contrib/Makefile.am file,
|
||||
correctly sort contrib/nglog.sh and add "ORGANIZATIONNAME" setting.
|
||||
- contrib/ngindent.sh: Add more GNU indent options for better results, and
|
||||
add the ".sh" suffix to bring this script in line with the others in the
|
||||
contrib/ folder.
|
||||
- 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
|
||||
- Log received signals with their names using strsignal(3), when available.
|
||||
- Make test suite compatible with Haiku OS.
|
||||
- Fix host mask cloaking bug, don't cloak multiple times: Previously, each
|
||||
server would cloak every user's host mask. The problem is that if a network
|
||||
has more than one server, then a user's host mask would get cloaked twice.
|
||||
This patch ensures that a server only cloaks the host mask if it has not yet
|
||||
been cloaked (the period indicates it's still an IP address). Thanks to
|
||||
JRMU <jrmu@lecturify.com> for the patch!
|
||||
Closes #228.
|
||||
- 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.
|
||||
- Fix and extend documentation: Fix some typos, fix syntax of LINKS and LIST
|
||||
commands, whitespace and spelling fixes, update dependencies and add some
|
||||
more information about IRCv3 support.
|
||||
Thanks to Thanks Windree, Étienne Mollier <etienne.mollier@mailoo.org> and
|
||||
Christoph Biedl <debian.axhn@manchmal.in-ulm.de>.
|
||||
Closes #264.
|
||||
- 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.conf.5: Fix wording as suggested by lintian.
|
||||
|
||||
ngIRCd 25 (2019-01-23)
|
||||
|
||||
- Fix documentation of MotdPhrase length, which actually is 126 characters:
|
||||
update sample configuration file as well as the man page. Thanks to
|
||||
shankari <shankari@eecs.berkeley.edu>.
|
||||
Closes #254.
|
||||
- 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.
|
||||
- Fix compilation without deprecated OpenSSL APIs. Thanks to Rosen Penev
|
||||
<rosenp@gmail.com> for the patch!
|
||||
Closes #252.
|
||||
- Update Xcode project for latest Xcode version (10.0)
|
||||
- Fix some compiler warnings of Apple Xcode/Clang
|
||||
- Allow a 5th parameter in WEBIRC. Thanks to "ItsOnlyBinary".
|
||||
Closes #247.
|
||||
- Update some more documentation files and source code comments.
|
||||
- Platforms.txt: Add and update systems.
|
||||
|
||||
ngIRCd 25~rc1 (2018-08-11)
|
||||
- Update config.guess (2018-03-08) and config.sub (2018-03-08) files.
|
||||
- Correctly retry to establish an outgoing connections when forking of the
|
||||
resolver sub-process failed (for example because of lack of free memory).
|
||||
Until now, such a connection was never retried once this error was hit.
|
||||
Thanks to Robert Obermeier for reporting this bug!
|
||||
Closes #243.
|
||||
- Fix a "use after free" bug which can be triggered on a newly established
|
||||
connection when the daemon handles an ERROR command received from the peer
|
||||
during client login. Thanks a lot to Joseph Bisch <joseph.bisch@gmail.com>
|
||||
for discovering and reporting this issue!
|
||||
- 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!
|
||||
- Fix some compiler warnings.
|
||||
- Add contrib/ngircd.logcheck: Some sample logcheck(8) rules.
|
||||
- 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.
|
||||
- Don't forward KILLs to other servers if they've been blocked locally:
|
||||
This prevents clients from killing IRC services, for example.
|
||||
Closes #238 and #239.
|
||||
- Fix a cross-compiler issue related to the Get_Error() function.
|
||||
Closes #240 and #241.
|
||||
- Update ./doc/Services.txt, enhance configuration examples.
|
||||
|
||||
ngIRCd 24 (2017-01-20)
|
||||
|
||||
@@ -136,7 +361,7 @@ ngIRCd 23 (2015-11-16)
|
||||
Idea and implementation by LucentW, Thanks! Closes #207.
|
||||
- Update ngircd.conf.5: "CloakUserToNick" hides user _and_ real name.
|
||||
This closes #208.
|
||||
- Fix case insensitive pattern matching: Up to now, only the the input
|
||||
- Fix case insensitive pattern matching: Up to now, only the input
|
||||
string became lowercased and was then compared to the pattern -- which
|
||||
failed when the pattern itself wasn't all lowercase!
|
||||
- Streamline the effect of "MorePrivacy" option: Update documentation
|
||||
@@ -489,7 +714,7 @@ ngIRCd 20.3 (2013-08-23)
|
||||
ngIRCd 20.2 (2013-02-15)
|
||||
|
||||
- Security: Fix a denial of service bug in the function handling KICK
|
||||
commands that could be used by arbitrary users to to crash the daemon
|
||||
commands that could be used by arbitrary users to crash the daemon
|
||||
(CVE-2013-1747).
|
||||
- WHO command: Use the currently "displayed hostname" (which can be cloaked!)
|
||||
for hostname matching, not the real one. In other words: don't display all
|
||||
|
367
INSTALL
367
INSTALL
@@ -1,367 +0,0 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2017 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 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"!).
|
||||
|
||||
|
||||
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:
|
||||
|
||||
0) Satisfy prerequisites
|
||||
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.
|
||||
|
||||
|
||||
0): Satisfy prerequisites
|
||||
|
||||
When building from source, you'll need some other software to build ngIRCd:
|
||||
for example a working C compiler, make tool, GNU automake and autoconf (only
|
||||
when not using a distribution archive), and a few libraries depending on the
|
||||
features you want to compile in (like IDENT support, SSL, and PAM).
|
||||
|
||||
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:
|
||||
|
||||
yum install \
|
||||
autoconf automake expect gcc glibc-devel gnutls-devel \
|
||||
libident-devel make pam-devel tcp_wrappers-devel telnet zlib-devel
|
||||
|
||||
* Debian / Ubuntu based distributions:
|
||||
|
||||
apt-get install \
|
||||
autoconf automake build-essential expect libgnutls-dev \
|
||||
libident-dev libpam-dev libwrap0-dev libz-dev telnet
|
||||
|
||||
|
||||
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: 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!
|
||||
|
||||
|
||||
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!
|
22
Makefile.am
22
Makefile.am
@@ -9,11 +9,9 @@
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
#
|
||||
|
||||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
SUBDIRS = doc src man contrib
|
||||
|
||||
EXTRA_DIST = autogen.sh configure.ng .clang_complete .mailmap
|
||||
EXTRA_DIST = README.md INSTALL.md autogen.sh configure.ng .clang_complete .mailmap
|
||||
|
||||
clean-local: osxpkg-clean
|
||||
rm -f build-stamp*
|
||||
@@ -25,13 +23,13 @@ maintainer-clean-local:
|
||||
rm -f config.log debian
|
||||
|
||||
testsuite:
|
||||
cd src/testsuite && make check
|
||||
cd src/testsuite && ${MAKE} check
|
||||
|
||||
lint:
|
||||
cd src/ngircd && make lint
|
||||
cd src/ngircd && ${MAKE} lint
|
||||
|
||||
srcdoc:
|
||||
cd doc && make srcdoc
|
||||
cd doc && ${MAKE} srcdoc
|
||||
|
||||
have-xcodebuild:
|
||||
@xcodebuild -project contrib/MacOSX/ngIRCd.xcodeproj -list \
|
||||
@@ -66,7 +64,7 @@ osxpkg: have-packagemaker osxpkg-dest
|
||||
--out ../../$(distdir).mpkg
|
||||
rm -f $(distdir).mpkg.zip
|
||||
zip -ro9 $(distdir).mpkg.zip $(distdir).mpkg
|
||||
make osxpkg-clean
|
||||
${MAKE} osxpkg-clean
|
||||
|
||||
osxpkg-clean:
|
||||
[ ! -r ngircd.dest ] || sudo -n rm -rf ngircd.dest
|
||||
@@ -74,12 +72,12 @@ osxpkg-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
|
||||
|
109
NEWS
109
NEWS
@@ -2,12 +2,117 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2017 Alexander Barton and Contributors.
|
||||
(c)2001-2021 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- NEWS --
|
||||
|
||||
ngIRCd 26.1 (2021-01-02)
|
||||
|
||||
- This release is a bugfix release only, without new features.
|
||||
|
||||
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)
|
||||
|
||||
@@ -261,7 +366,7 @@ 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 to crash the daemon
|
||||
commands that could be used by arbitrary users to crash the daemon
|
||||
(CVE-2013-1747).
|
||||
|
||||
ngIRCd 20.1 (2013-01-02)
|
||||
|
89
README
89
README
@@ -1,89 +0,0 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2017 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- README --
|
||||
|
||||
|
||||
I. Introduction
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
ngIRCd is a free, portable and lightweight Internet Relay Chat server for
|
||||
small or private networks, developed under the GNU General Public License
|
||||
(GPL; please see the file COPYING for details). It is simple to configure,
|
||||
can cope with dynamic IP addresses, and supports IPv6 as well as SSL. It is
|
||||
written from scratch and not based on the original IRCd.
|
||||
|
||||
The name ngIRCd means next generation IRC daemon, which is a little bit
|
||||
exaggerated: lightweight Internet Relay Chat server most probably would be a
|
||||
better name :-)
|
||||
|
||||
Please see the INSTALL document for installation and upgrade information!
|
||||
|
||||
|
||||
II. Status
|
||||
~~~~~~~~~~~
|
||||
|
||||
ngIRCd should be quite feature complete and stable to be used as 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.
|
||||
|
||||
|
||||
III. 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, 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
|
||||
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.
|
||||
|
||||
Visit our source code repository at GitHub if you are interested in the
|
||||
latest development version: <https://github.com/ngircd/ngircd>.
|
||||
|
||||
|
||||
VI. 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.php> for details.
|
||||
|
||||
If you find bugs in ngIRCd (which will be there most probably ...), 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>
|
||||
|
||||
There you can read about known bugs and limitations, too.
|
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
|
@@ -103,7 +103,8 @@ 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
|
||||
}
|
||||
|
||||
@@ -161,6 +162,7 @@ AUTOMAKE_VERSION=$(echo $AUTOMAKE | cut -d'-' -f2-)
|
||||
[ -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
|
||||
|
1031
config.guess
vendored
Normal file → Executable file
1031
config.guess
vendored
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
2948
config.sub
vendored
Normal file → Executable file
2948
config.sub
vendored
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
82
configure.ng
82
configure.ng
@@ -29,7 +29,7 @@ AC_CONFIG_SRCDIR([src/ngircd/ngircd.c])
|
||||
AC_CONFIG_HEADER([src/config.h])
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
AM_INIT_AUTOMAKE([-Wall 1.10 ]ng_color_tests)
|
||||
AM_INIT_AUTOMAKE([-Wall 1.10 foreign ]ng_color_tests)
|
||||
|
||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||
|
||||
@@ -154,15 +154,30 @@ AC_HEADER_TIME
|
||||
|
||||
# Required header files
|
||||
AC_CHECK_HEADERS([ \
|
||||
fcntl.h netdb.h netinet/in.h stdlib.h string.h \
|
||||
strings.h sys/socket.h sys/time.h sys/types.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!]))
|
||||
|
||||
# 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 \
|
||||
])
|
||||
arpa/inet.h \
|
||||
inttypes.h \
|
||||
malloc.h \
|
||||
netinet/in_systm.h \
|
||||
netinet/ip.h \
|
||||
stdbool.h \
|
||||
stddef.h \
|
||||
stdint.h \
|
||||
varargs.h \
|
||||
])
|
||||
|
||||
# -- Datatypes --
|
||||
|
||||
@@ -212,17 +227,50 @@ AC_FUNC_STRFTIME
|
||||
|
||||
# Required functions
|
||||
AC_CHECK_FUNCS([ \
|
||||
alarm dup2 endpwent gethostbyaddr gethostbyname gethostname \
|
||||
gettimeofday inet_ntoa memmove memset setsid socket strcasecmp \
|
||||
strchr strcspn strerror strncasecmp strrchr strspn strstr \
|
||||
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!]))
|
||||
|
||||
# Optional functions
|
||||
AC_CHECK_FUNCS_ONCE([
|
||||
arc4random arc4random_stir gai_strerror getnameinfo inet_aton \
|
||||
setgroups sigaction sigprocmask snprintf strdup strlcat strlcpy \
|
||||
strndup strtok_r unsetenv vsnprintf waitpid])
|
||||
arc4random \
|
||||
arc4random_stir \
|
||||
gai_strerror \
|
||||
getnameinfo \
|
||||
inet_aton \
|
||||
setgroups \
|
||||
sigaction \
|
||||
sigprocmask \
|
||||
snprintf \
|
||||
strdup \
|
||||
strlcat \
|
||||
strlcpy \
|
||||
strndup \
|
||||
strsignal \
|
||||
strtok_r \
|
||||
unsetenv \
|
||||
vsnprintf \
|
||||
waitpid \
|
||||
])
|
||||
|
||||
WORKING_GETADDRINFO
|
||||
|
||||
@@ -417,8 +465,12 @@ AC_ARG_WITH(openssl,
|
||||
CPPFLAGS="-I$withval/include $CPPFLAGS"
|
||||
LDFLAGS="-L$withval/lib $LDFLAGS"
|
||||
fi
|
||||
AC_CHECK_LIB(crypto, BIO_s_mem)
|
||||
AC_CHECK_LIB(ssl, SSL_new)
|
||||
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])
|
||||
)
|
||||
@@ -454,6 +506,8 @@ 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
|
||||
|
@@ -1,3 +1,39 @@
|
||||
ngircd (26.1-0ab1) unstable; urgency=medium
|
||||
|
||||
* New "upstream" release: ngIRCd 26.1.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sat, 02 Jan 2021 14:31:51 +0100
|
||||
|
||||
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.
|
||||
|
@@ -19,16 +19,21 @@ Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Provides: ircd
|
||||
Description: lightweight Internet Relay Chat server
|
||||
This package provides ngIRCd, a portable and lightweight Internet Relay
|
||||
Chat server for small or private networks, developed under the GNU
|
||||
General Public License (GPL). It is simple to configure, can cope with
|
||||
dynamic IP addresses, and supports IPv6 as well as SSL. It is written
|
||||
from scratch and not based on the original IRCd.
|
||||
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
|
||||
@@ -36,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 portable and lightweight Internet Relay
|
||||
Chat server for small or private networks, developed under the GNU
|
||||
General Public License (GPL). It is simple to configure, can cope with
|
||||
dynamic IP addresses, and supports IPv6 as well as SSL. It is written
|
||||
from scratch and not based on the original IRCd.
|
||||
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
|
||||
@@ -52,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 portable and lightweight Internet Relay
|
||||
Chat server for small or private networks, developed under the GNU
|
||||
General Public License (GPL). It is simple to configure, can cope with
|
||||
dynamic IP addresses, and supports IPv6 as well as SSL. It is written
|
||||
from scratch and not based on the original IRCd.
|
||||
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
|
||||
|
@@ -113,6 +113,8 @@
|
||||
#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
|
||||
|
@@ -51,18 +51,6 @@
|
||||
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 */
|
||||
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>"; };
|
||||
@@ -166,10 +154,10 @@
|
||||
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; };
|
||||
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>"; };
|
||||
@@ -179,12 +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; name = Makefile.am; path = MacOSX/Makefile.am; sourceTree = "<group>"; };
|
||||
FA322D8E0CEF7523001761B3 /* ngIRCd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = ngIRCd.xcodeproj; 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>"; };
|
||||
@@ -203,11 +189,12 @@
|
||||
FA322DC00CEF77CB001761B3 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
|
||||
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>"; };
|
||||
@@ -216,6 +203,8 @@
|
||||
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>"; };
|
||||
@@ -244,8 +233,10 @@
|
||||
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>"; };
|
||||
@@ -288,9 +279,9 @@
|
||||
FA322D5A0CEF750F001761B3 /* AUTHORS */,
|
||||
FA322D5C0CEF750F001761B3 /* ChangeLog */,
|
||||
FA322D610CEF750F001761B3 /* COPYING */,
|
||||
FA322D620CEF750F001761B3 /* INSTALL */,
|
||||
FA322D620CEF750F001761B3 /* INSTALL.md */,
|
||||
FA322D640CEF750F001761B3 /* NEWS */,
|
||||
FA322D650CEF750F001761B3 /* README */,
|
||||
FA322D650CEF750F001761B3 /* README.md */,
|
||||
FA322D5B0CEF750F001761B3 /* autogen.sh */,
|
||||
FA322D5E0CEF750F001761B3 /* config.guess */,
|
||||
FA322D5F0CEF750F001761B3 /* config.sub */,
|
||||
@@ -437,32 +428,34 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA18A64A16CEE18100132F66 /* Makefile.ng */,
|
||||
FA322D250CEF74B1001761B3 /* README */,
|
||||
FA322D1D0CEF74B1001761B3 /* channel-test.e */,
|
||||
FA322D1E0CEF74B1001761B3 /* check-idle.e */,
|
||||
FA322D1F0CEF74B1001761B3 /* connect-test.e */,
|
||||
FA322D200CEF74B1001761B3 /* functions.inc */,
|
||||
FA322D210CEF74B1001761B3 /* getpid.sh */,
|
||||
FAA3D2700F139CB300B2447E /* invite-test.e */,
|
||||
FAA3D2710F139CB300B2447E /* join-test.e */,
|
||||
FAA3D2720F139CB300B2447E /* kick-test.e */,
|
||||
FAA3D2730F139CB300B2447E /* message-test.e */,
|
||||
FA18A64E16CEE24B00132F66 /* misc-test.e */,
|
||||
FA18A64C16CEE1AC00132F66 /* mode-test.e */,
|
||||
FAA3D2760F139CB300B2447E /* opless-channel-test.e */,
|
||||
FAA3D2770F139CB300B2447E /* server-link-test.e */,
|
||||
FA322D280CEF74B1001761B3 /* stress-A.e */,
|
||||
FA322D290CEF74B1001761B3 /* stress-B.e */,
|
||||
FA1A6BBD0D6857D900AA8F71 /* who-test.e */,
|
||||
FA18A64D16CEE1D900132F66 /* whois-test.e */,
|
||||
FA322D200CEF74B1001761B3 /* functions.inc */,
|
||||
FAA3D2740F139CB300B2447E /* ngircd-test1.conf */,
|
||||
FAA3D2750F139CB300B2447E /* ngircd-test2.conf */,
|
||||
FA322D210CEF74B1001761B3 /* getpid.sh */,
|
||||
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>";
|
||||
@@ -480,19 +473,20 @@
|
||||
FA322D660CEF7523001761B3 /* contrib */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322D8D0CEF7523001761B3 /* Makefile.am */,
|
||||
FAC4E5CD23A7DE2400A04296 /* Makefile.am */,
|
||||
FA322D680CEF7523001761B3 /* Debian */,
|
||||
FA322D730CEF7523001761B3 /* MacOSX */,
|
||||
FA322D950CEF7523001761B3 /* README */,
|
||||
FA322D920CEF7523001761B3 /* ngindent */,
|
||||
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 */,
|
||||
FA322D960CEF7523001761B3 /* systrace.policy */,
|
||||
);
|
||||
name = contrib;
|
||||
path = ..;
|
||||
@@ -511,6 +505,7 @@
|
||||
FA18A64116CEDE3500132F66 /* ngircd.pam */,
|
||||
FA322D710CEF7523001761B3 /* ngircd.postinst */,
|
||||
FA322D720CEF7523001761B3 /* rules */,
|
||||
FA4B4F552055B4C800A04296 /* source */,
|
||||
);
|
||||
path = Debian;
|
||||
sourceTree = "<group>";
|
||||
@@ -546,7 +541,6 @@
|
||||
FA18A64416CEDFCE00132F66 /* Commands.txt */,
|
||||
FAE22BD415270EA300F1A5AB /* Contributing.txt */,
|
||||
FA322D9A0CEF752C001761B3 /* FAQ.txt */,
|
||||
FA407F380DB15AC700271AF1 /* GIT.txt */,
|
||||
FAE22BD515270EB500F1A5AB /* HowToRelease.txt */,
|
||||
FAE22BD615270EB500F1A5AB /* Modes.txt */,
|
||||
FAE22BD715270EB500F1A5AB /* PAM.txt */,
|
||||
@@ -617,7 +611,6 @@
|
||||
buildPhases = (
|
||||
8DD76FAB0486AB0100D96B5E /* Sources */,
|
||||
8DD76FAD0486AB0100D96B5E /* Frameworks */,
|
||||
8DD76FAF0486AB0100D96B5E /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
@@ -635,17 +628,16 @@
|
||||
08FB7793FE84155DC02AAC07 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0800;
|
||||
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 = "";
|
||||
@@ -715,113 +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 = {
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
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_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = 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;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_NO_COMMON_BLOCKS = NO;
|
||||
GCC_VERSION = "";
|
||||
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;
|
||||
SDKROOT = "";
|
||||
PRODUCT_NAME = ngircd;
|
||||
};
|
||||
name = Default;
|
||||
};
|
||||
FAB0570C105D917F006AF9E2 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
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_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = 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_DEBUGGING_SYMBOLS = full;
|
||||
GCC_NO_COMMON_BLOCKS = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_VERSION = "";
|
||||
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;
|
||||
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-2013 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
|
||||
@@ -12,15 +12,17 @@
|
||||
SUBDIRS = Debian MacOSX
|
||||
|
||||
EXTRA_DIST = README \
|
||||
ngindent \
|
||||
de.barton.ngircd.metainfo.xml \
|
||||
ngindent.sh \
|
||||
ngircd-bsd.sh \
|
||||
ngIRCd-Logo.gif \
|
||||
ngircd-redhat.init \
|
||||
ngircd.logcheck \
|
||||
ngircd.service \
|
||||
ngircd.socket \
|
||||
ngircd.spec \
|
||||
platformtest.sh \
|
||||
systrace.policy
|
||||
nglog.sh \
|
||||
platformtest.sh
|
||||
|
||||
maintainer-clean-local:
|
||||
rm -f Makefile Makefile.in
|
||||
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2013 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.
|
||||
|
||||
@@ -18,7 +18,10 @@ 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,6 +30,9 @@ 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.
|
||||
|
||||
@@ -36,8 +42,8 @@ ngircd.socket
|
||||
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).
|
||||
|
127
contrib/de.barton.ngircd.metainfo.xml
Normal file
127
contrib/de.barton.ngircd.metainfo.xml
Normal file
@@ -0,0 +1,127 @@
|
||||
<?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.1" date="2021-01-02" />
|
||||
<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
|
||||
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
|
||||
|
||||
$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-
|
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!$
|
@@ -1,5 +1,5 @@
|
||||
%define name ngircd
|
||||
%define version 24
|
||||
%define version 26.1
|
||||
%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 portable and lightweight Internet Relay
|
||||
Chat server for small or private networks, developed under the GNU
|
||||
General Public License (GPL). It is simple to configure, can cope with
|
||||
dynamic IP addresses, and supports IPv6 as well as SSL. It is written
|
||||
from scratch and not based on the original IRCd.
|
||||
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 2001
|
||||
|
||||
%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
|
@@ -174,8 +174,7 @@ if [ -r "Makefile" ]; then
|
||||
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')
|
||||
| sed -e 's/version //g; s/^\([A-Z]\)[A-Za-z]* clang/\1-clang/g; s/LLVM /clang /g')
|
||||
fi
|
||||
$CC -version 2>&1 | grep -i "tcc" >/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
|
@@ -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-
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2013 Alexander Barton and Contributors.
|
||||
(c)2001-2019 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -386,7 +386,7 @@ Status and Informational Commands
|
||||
- RFC 2812, 4.9 "Ison message"
|
||||
|
||||
- LINKS
|
||||
LINKS [[<target>] [<mask>]
|
||||
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
|
||||
@@ -617,9 +617,10 @@ Channel Commands
|
||||
- RFC 2812, 3.2.8 "Kick command"
|
||||
|
||||
- LIST
|
||||
LIST [<channel>[,<channel>[,...]] [<server>]]
|
||||
LIST [<mask>[,<mask>[,...]] [<server>]]
|
||||
.
|
||||
List all visible <channels> (comma-separated list).
|
||||
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.
|
||||
@@ -873,6 +874,10 @@ Server Protocol Commands
|
||||
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:
|
||||
@@ -882,7 +887,7 @@ Server Protocol Commands
|
||||
- ERROR
|
||||
ERROR [<message> [<> [...]]]
|
||||
.
|
||||
Inform a client or a server about an error condition. The first
|
||||
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.
|
||||
.
|
||||
|
@@ -29,20 +29,20 @@ A: ngIRCd offers several benefits: no problems with dynamic IPs, easy to
|
||||
II. Compilation
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Q: I did a "CVS checkout" but can't execute ./configure because the script
|
||||
Q: I did a "Git checkout" but can't execute ./configure because the script
|
||||
is missing in the generated directory!?
|
||||
A: When using development versions via CVS, the configure script as well as
|
||||
A: When using development versions via Git, the configure script as well as
|
||||
the Makefile.in templates must be generated using GNU automake and GNU
|
||||
autoconf. To simplify this task run the ./autogen.sh script which will
|
||||
execute the required tools for you; then continue with executing the
|
||||
./configure script as usual.
|
||||
|
||||
Q: The ./autogen.sh script complains "aclocal: command not found".
|
||||
A: GNU automake is missing on your system but required for building CVS
|
||||
A: GNU automake is missing on your system but required for building Git
|
||||
versions of ngIRCd. Install GNU automake 1.6 or later and try again.
|
||||
|
||||
Q: The ./autogen.sh script stops with "autoheader: command not found".
|
||||
A: GNU autoconf is missing on your system but required for building CVS
|
||||
A: GNU autoconf is missing on your system but required for building Git
|
||||
versions of ngIRCd. Install GNU autoconf 2.52 or later and try again.
|
||||
|
||||
Q: The ./autogen.sh script fails and the message "automake: configure.in:
|
||||
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2017 Alexander Barton and Contributors.
|
||||
(c)2001-2021 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -35,19 +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 ;-)
|
||||
- is the AUTHORS file up to date?
|
||||
|
||||
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.67 and GNU automake 1.11.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,15 +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) Update the list of releases in our bug tracker.
|
||||
n) Write an announcement to the mailing list, Twitter, ...
|
||||
|
||||
o) Relax :-)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2015 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
|
||||
@@ -39,7 +39,7 @@ 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
|
||||
|
||||
@@ -55,7 +55,7 @@ all: $(generated_docs)
|
||||
install-data-hook: $(static_docs) $(toplevel_docs) $(generated_docs)
|
||||
$(MKDIR_P) -m 755 $(DESTDIR)$(sysconfdir)
|
||||
@if [ ! -f $(DESTDIR)$(sysconfdir)/ngircd.conf ]; then \
|
||||
make install-config; \
|
||||
${MAKE} install-config; \
|
||||
fi
|
||||
$(MKDIR_P) -m 755 $(DESTDIR)$(docdir)
|
||||
for f in $(static_docs) $(toplevel_docs); do \
|
||||
@@ -75,7 +75,7 @@ install-config:
|
||||
uninstall-hook:
|
||||
rm -rf $(DESTDIR)$(docdir)
|
||||
@if cmp --silent sample-ngircd.conf $(DESTDIR)$(sysconfdir)/ngircd.conf; then \
|
||||
make uninstall-config; \
|
||||
${MAKE} uninstall-config; \
|
||||
else \
|
||||
echo; \
|
||||
echo " ** NOTE: Not uninstalling changed configuration file:"; \
|
||||
@@ -87,7 +87,7 @@ uninstall-config:
|
||||
rm -f $(DESTDIR)$(sysconfdir)/ngircd.conf
|
||||
|
||||
srcdoc:
|
||||
make -C src srcdoc
|
||||
${MAKE} -C src srcdoc
|
||||
|
||||
.PHONY: install-config uninstall-config srcdoc
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2016 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.
|
||||
|
||||
@@ -26,6 +26,7 @@ for inclusion here. Thanks for your help!
|
||||
| | | |
|
||||
Platform Compiler ngIRCd Date Tester C M T R *
|
||||
--------------------------- ------------ ---------- -------- -------- - - - - -
|
||||
aarch64/apple/darwin A-clang 12.0.0 26 20-12-10 goetz N Y Y Y 3
|
||||
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
|
||||
@@ -45,7 +46,7 @@ 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 23 16-02-07 goetz Y Y Y Y 4
|
||||
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
|
||||
@@ -78,11 +79,14 @@ 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 18 11-07-02 goetz Y Y Y Y 3
|
||||
powerpc/apple/darwin8.11.0 gcc 4.0.1 26 20-07-08 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
|
||||
@@ -95,12 +99,20 @@ 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.3.0 A-clang 8.0 24~rc1-7 17-01-20 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/apple/darwin19.6.0 A-clang 12.0.0 26 20-10-20 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin20.1.0 A-clang 12.0.0 26 21-01-01 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.0 F-clang 3.3 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/freebsd12.1 F-clang 8.0.1 26 20-08-28 alex 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
|
||||
@@ -108,30 +120,37 @@ 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.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 20-08-28 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/netbsd9.0 gcc 7.4.0 26 20-08-28 alex Y Y y Y 3
|
||||
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
|
||||
x86_64/unknown/openbsd6.6 gcc 4.2.1 26 20-08-28 alex Y Y Y Y 3
|
||||
x86_64/unknown/openbsd6.6 O-clang 8.0.1 26 20-08-28 alex Y Y Y Y 3
|
||||
x86_64/unknown/openbsd6.7 gcc 4.2.1 26 20-09-26 goetz Y Y y Y 3
|
||||
|
||||
|
||||
* 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.
|
||||
@@ -139,3 +158,9 @@ x86_64/unknown/openbsd5.5 gcc 4.2.1 22~rc1-3 14-10-10 alex Y Y Y Y 3
|
||||
(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).
|
||||
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2012 Alexander Barton and Contributors.
|
||||
(c)2001-2019 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -26,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
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -176,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
|
||||
@@ -186,6 +192,9 @@ 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
|
||||
|
||||
|
@@ -15,7 +15,7 @@ using the IRC protocol as defined in RFC 1459 or RFC 2812.
|
||||
|
||||
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>)
|
||||
- Atheme 7.0.2 or later (<https://atheme.org/>)
|
||||
- "IRC Services" 5.1.x by Andrew Church (<http://achurch.org/services/>)
|
||||
|
||||
This document describes setting up ngIRCd and these services.
|
||||
@@ -34,6 +34,10 @@ services instead of regular IRC users.
|
||||
|
||||
Example:
|
||||
|
||||
[GLOBAL]
|
||||
Name = server.irc.net
|
||||
Ports = 6667
|
||||
|
||||
[SERVER]
|
||||
Name = services.irc.net
|
||||
MyPassword = 123abc
|
||||
@@ -97,13 +101,17 @@ In conf/nickserv.conf:
|
||||
Setting up Atheme 7.0.2 or later
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Atheme 7.0.2 or later (<http://www.atheme.net>) may be used with ngIRCd using
|
||||
Atheme 7.0.2 or later (<https://atheme.org/>) 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;
|
||||
|
@@ -51,7 +51,7 @@
|
||||
# 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
|
||||
@@ -117,6 +117,12 @@
|
||||
# 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
|
||||
@@ -303,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.
|
||||
#
|
||||
@@ -379,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,7 +1,7 @@
|
||||
.\"
|
||||
.\" ngircd(8) manual page template
|
||||
.\"
|
||||
.TH ngircd 8 "Jan 2017" ngIRCd "ngIRCd Manual"
|
||||
.TH ngircd 8 "Jan 2021" ngIRCd "ngIRCd Manual"
|
||||
.SH NAME
|
||||
ngIRCd \- the "next generation" IRC daemon
|
||||
.SH SYNOPSIS
|
||||
@@ -13,12 +13,15 @@ ngIRCd \- the "next generation" IRC daemon
|
||||
.BR ngIRCd
|
||||
is a free, portable and lightweight Internet Relay Chat server for small
|
||||
or private networks, developed under the GNU General Public License (GPL).
|
||||
It is easy to configure, can cope with dynamic IP addresses, and supports
|
||||
IPv6, SSL-protected connections as well as PAM for authentication.
|
||||
It is written from scratch and not based on the original IRCd.
|
||||
.PP
|
||||
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
|
||||
The name ngIRCd means
|
||||
.IR "next generation IRC daemon",
|
||||
.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 :-)
|
||||
|
@@ -1,7 +1,7 @@
|
||||
.\"
|
||||
.\" ngircd.conf(5) manual page template
|
||||
.\"
|
||||
.TH ngircd.conf 5 "Jan 2017" ngIRCd "ngIRCd Manual"
|
||||
.TH ngircd.conf 5 "Jan 2021" ngIRCd "ngIRCd Manual"
|
||||
.SH NAME
|
||||
ngircd.conf \- configuration file of ngIRCd
|
||||
.SH SYNOPSIS
|
||||
@@ -125,7 +125,7 @@ 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
|
||||
@@ -201,6 +201,12 @@ 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
|
||||
@@ -341,7 +347,7 @@ Default: no.
|
||||
.TP
|
||||
\fBPAMServiceName\fR (string)
|
||||
When PAM is enabled, this value determines the used PAM configuration.
|
||||
This setting allows to run multiple ngIRCd instances with different
|
||||
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.
|
||||
@@ -426,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
|
||||
@@ -504,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
|
||||
@@ -551,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
|
||||
|
@@ -36,6 +36,8 @@
|
||||
#include "log.h"
|
||||
#include "messages.h"
|
||||
#include "match.h"
|
||||
#include "parse.h"
|
||||
#include "irc-mode.h"
|
||||
|
||||
#define REMOVE_PART 0
|
||||
#define REMOVE_QUIT 1
|
||||
@@ -93,9 +95,11 @@ GLOBAL void
|
||||
Channel_InitPredefined( void )
|
||||
{
|
||||
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);
|
||||
|
||||
@@ -126,21 +130,61 @@ Channel_InitPredefined( void )
|
||||
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);
|
||||
|
@@ -337,7 +337,11 @@ Client_SetHostname( CLIENT *Client, const char *Hostname )
|
||||
assert(Client != NULL);
|
||||
assert(Hostname != NULL);
|
||||
|
||||
if (Conf_CloakHost[0]) {
|
||||
/* Only cloak the hostmask if it has not yet been cloaked.
|
||||
* The period or colon indicates it's still an IP address.
|
||||
* An empty string means a rDNS lookup did not happen (yet). */
|
||||
if (Conf_CloakHost[0] && (!Client->host[0] || strchr(Client->host, '.')
|
||||
|| strchr(Client->host, ':'))) {
|
||||
char cloak[GETID_LEN];
|
||||
|
||||
strlcpy(cloak, Hostname, GETID_LEN);
|
||||
|
@@ -13,6 +13,10 @@
|
||||
#ifdef HAVE_LIBSSL
|
||||
#define SSL_SUPPORT
|
||||
#include <openssl/ssl.h>
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
||||
#define OpenSSL_version SSLeay_version
|
||||
#define OPENSSL_VERSION SSLEAY_VERSION
|
||||
#endif
|
||||
#endif
|
||||
#ifdef HAVE_LIBGNUTLS
|
||||
#define SSL_SUPPORT
|
||||
@@ -36,6 +40,7 @@ struct ConnSSL_State {
|
||||
gnutls_session_t gnutls_session;
|
||||
void *cookie; /* pointer to server configuration structure
|
||||
(for outgoing connections), or NULL. */
|
||||
size_t x509_cred_idx; /* index of active x509 credential record */
|
||||
#endif
|
||||
char *fingerprint;
|
||||
};
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* 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
|
||||
@@ -328,7 +328,7 @@ Conf_Test( void )
|
||||
{
|
||||
struct passwd *pwd;
|
||||
struct group *grp;
|
||||
unsigned int i;
|
||||
unsigned int i, j;
|
||||
bool config_valid;
|
||||
size_t predef_channel_count;
|
||||
struct Conf_Channel *predef_chan;
|
||||
@@ -388,6 +388,7 @@ Conf_Test( void )
|
||||
printf(" MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP);
|
||||
printf(" MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1);
|
||||
printf(" MaxNickLength = %u\n", Conf_MaxNickLength - 1);
|
||||
printf(" MaxPenaltyTime = %ld\n", (long)Conf_MaxPenaltyTime);
|
||||
printf(" MaxListSize = %d\n", Conf_MaxListSize);
|
||||
printf(" PingTimeout = %d\n", Conf_PingTimeout);
|
||||
printf(" PongTimeout = %d\n", Conf_PongTimeout);
|
||||
@@ -482,7 +483,8 @@ Conf_Test( void )
|
||||
/* Valid "Channel" section */
|
||||
puts( "[CHANNEL]" );
|
||||
printf(" Name = %s\n", predef_chan->name);
|
||||
printf(" Modes = %s\n", predef_chan->modes);
|
||||
for(j = 0; j < predef_chan->modes_num; j++)
|
||||
printf(" Modes = %s\n", predef_chan->modes[j]);
|
||||
printf(" Key = %s\n", predef_chan->key);
|
||||
printf(" MaxUsers = %lu\n", predef_chan->maxusers);
|
||||
printf(" Topic = %s\n", predef_chan->topic);
|
||||
@@ -711,7 +713,6 @@ Conf_NickIsService(int ConfServer, const char *Nick)
|
||||
/**
|
||||
* Check if the given nickname is blocked for "normal client" use.
|
||||
*
|
||||
* @param ConfServer The server index or NONE to check all configured servers.
|
||||
* @param Nick The nickname to check.
|
||||
* @returns true if the given nickname belongs to an "IRC service".
|
||||
*/
|
||||
@@ -766,6 +767,7 @@ Set_Defaults(bool InitServers)
|
||||
Conf_MaxConnectionsIP = 5;
|
||||
Conf_MaxJoins = 10;
|
||||
Conf_MaxNickLength = CLIENT_NICK_LEN_DEFAULT;
|
||||
Conf_MaxPenaltyTime = -1;
|
||||
Conf_MaxListSize = 100;
|
||||
Conf_PingTimeout = 120;
|
||||
Conf_PongTimeout = 20;
|
||||
@@ -845,13 +847,13 @@ no_listenports(void)
|
||||
*
|
||||
* This function is used to read the MOTD and help text file, for example.
|
||||
*
|
||||
* @param filename Name of the file to read.
|
||||
* @param Filename Name of the file to read.
|
||||
* @return true, when the file has been read in.
|
||||
*/
|
||||
static bool
|
||||
Read_TextFile(const char *Filename, const char *Name, array *Destination)
|
||||
{
|
||||
char line[127];
|
||||
char line[COMMAND_LEN];
|
||||
FILE *fp;
|
||||
int line_no = 1;
|
||||
|
||||
@@ -887,9 +889,9 @@ Read_TextFile(const char *Filename, const char *Name, array *Destination)
|
||||
* Please note that this function uses exit(1) on fatal errors and therefore
|
||||
* can result in ngIRCd terminating!
|
||||
*
|
||||
* @param ngircd_starting Flag indicating if ngIRCd is starting or not.
|
||||
* @returns true when the configuration file has been read
|
||||
* successfully; false otherwise.
|
||||
* @param IsStarting Flag indicating if ngIRCd is starting or not.
|
||||
* @returns true when the configuration file has been read
|
||||
* successfully; false otherwise.
|
||||
*/
|
||||
static bool
|
||||
Read_Config(bool TestOnly, bool IsStarting)
|
||||
@@ -901,6 +903,8 @@ Read_Config(bool TestOnly, bool IsStarting)
|
||||
FILE *fd;
|
||||
DIR *dh;
|
||||
|
||||
Config_Error(LOG_INFO, "Using configuration file \"%s\" ...", NGIRCd_ConfFile);
|
||||
|
||||
/* Open configuration file */
|
||||
fd = fopen( NGIRCd_ConfFile, "r" );
|
||||
if( ! fd ) {
|
||||
@@ -1286,116 +1290,6 @@ WarnPAM(const char UNUSED *File, int UNUSED Line)
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle legacy "NoXXX" options in [GLOBAL] section.
|
||||
*
|
||||
* TODO: This function and support for "NoXXX" could be removed starting
|
||||
* with ngIRCd release 19 (one release after marking it "deprecated").
|
||||
*
|
||||
* @param Var Variable name.
|
||||
* @param Arg Argument string.
|
||||
* @returns true if a NoXXX option has been processed; false otherwise.
|
||||
*/
|
||||
static bool
|
||||
CheckLegacyNoOption(const char *Var, const char *Arg)
|
||||
{
|
||||
if(strcasecmp(Var, "NoDNS") == 0) {
|
||||
Conf_DNS = !Check_ArgIsTrue( Arg );
|
||||
return true;
|
||||
}
|
||||
if (strcasecmp(Var, "NoIdent") == 0) {
|
||||
Conf_Ident = !Check_ArgIsTrue(Arg);
|
||||
return true;
|
||||
}
|
||||
if(strcasecmp(Var, "NoPAM") == 0) {
|
||||
Conf_PAM = !Check_ArgIsTrue(Arg);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle deprecated legacy options in [GLOBAL] section.
|
||||
*
|
||||
* TODO: This function and support for these options in the [Global] section
|
||||
* could be removed starting with ngIRCd release 19 (one release after
|
||||
* marking it "deprecated").
|
||||
*
|
||||
* @param Var Variable name.
|
||||
* @param Arg Argument string.
|
||||
* @returns true if a legacy option has been processed; false otherwise.
|
||||
*/
|
||||
static const char*
|
||||
CheckLegacyGlobalOption(const char *File, int Line, char *Var, char *Arg)
|
||||
{
|
||||
if (strcasecmp(Var, "AllowRemoteOper") == 0
|
||||
|| strcasecmp(Var, "ChrootDir") == 0
|
||||
|| strcasecmp(Var, "ConnectIPv4") == 0
|
||||
|| strcasecmp(Var, "ConnectIPv6") == 0
|
||||
|| strcasecmp(Var, "OperCanUseMode") == 0
|
||||
|| strcasecmp(Var, "OperChanPAutoOp") == 0
|
||||
|| strcasecmp(Var, "OperServerMode") == 0
|
||||
|| strcasecmp(Var, "PredefChannelsOnly") == 0
|
||||
|| strcasecmp(Var, "SyslogFacility") == 0
|
||||
|| strcasecmp(Var, "WebircPassword") == 0) {
|
||||
Handle_OPTIONS(File, Line, Var, Arg);
|
||||
return "[Options]";
|
||||
}
|
||||
if (strcasecmp(Var, "ConnectRetry") == 0
|
||||
|| strcasecmp(Var, "IdleTimeout") == 0
|
||||
|| strcasecmp(Var, "MaxConnections") == 0
|
||||
|| strcasecmp(Var, "MaxConnectionsIP") == 0
|
||||
|| strcasecmp(Var, "MaxJoins") == 0
|
||||
|| strcasecmp(Var, "MaxNickLength") == 0
|
||||
|| strcasecmp(Var, "PingTimeout") == 0
|
||||
|| strcasecmp(Var, "PongTimeout") == 0) {
|
||||
Handle_LIMITS(File, Line, Var, Arg);
|
||||
return "[Limits]";
|
||||
}
|
||||
#ifdef SSL_SUPPORT
|
||||
if (strcasecmp(Var, "SSLCertFile") == 0
|
||||
|| strcasecmp(Var, "SSLDHFile") == 0
|
||||
|| strcasecmp(Var, "SSLKeyFile") == 0
|
||||
|| strcasecmp(Var, "SSLKeyFilePassword") == 0
|
||||
|| strcasecmp(Var, "SSLPorts") == 0) {
|
||||
Handle_SSL(File, Line, Var + 3, Arg);
|
||||
return "[SSL]";
|
||||
}
|
||||
#endif
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip "no" prefix of a string.
|
||||
*
|
||||
* TODO: This function and support for "NoXXX" should be removed starting
|
||||
* with ngIRCd release 19! (One release after marking it "deprecated").
|
||||
*
|
||||
* @param str Pointer to input string starting with "no".
|
||||
* @returns New pointer to string without "no" prefix.
|
||||
*/
|
||||
static const char *
|
||||
NoNo(const char *str)
|
||||
{
|
||||
assert(strncasecmp("no", str, 2) == 0 && str[2]);
|
||||
return str + 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Invert "boolean" string.
|
||||
*
|
||||
* TODO: This function and support for "NoXXX" should be removed starting
|
||||
* with ngIRCd release 19! (One release after marking it "deprecated").
|
||||
*
|
||||
* @param arg "Boolean" input string.
|
||||
* @returns Pointer to inverted "boolean string".
|
||||
*/
|
||||
static const char *
|
||||
InvertArg(const char *arg)
|
||||
{
|
||||
return yesno_to_str(!Check_ArgIsTrue(arg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle variable in [Global] configuration section.
|
||||
@@ -1410,7 +1304,6 @@ Handle_GLOBAL(const char *File, int Line, char *Var, char *Arg )
|
||||
struct passwd *pwd;
|
||||
struct group *grp;
|
||||
size_t len;
|
||||
const char *section;
|
||||
char *ptr;
|
||||
|
||||
assert(File != NULL);
|
||||
@@ -1550,36 +1443,6 @@ Handle_GLOBAL(const char *File, int Line, char *Var, char *Arg )
|
||||
return;
|
||||
}
|
||||
|
||||
if (CheckLegacyNoOption(Var, Arg)) {
|
||||
/* TODO: This function and support for "NoXXX" could be
|
||||
* be removed starting with ngIRCd release 19 (one release
|
||||
* after marking it "deprecated"). */
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Global\"): \"No\"-Prefix is deprecated, use \"%s = %s\" in [Options] section!",
|
||||
File, Line, NoNo(Var), InvertArg(Arg));
|
||||
if (strcasecmp(Var, "NoIdent") == 0)
|
||||
WarnIdent(File, Line);
|
||||
else if (strcasecmp(Var, "NoPam") == 0)
|
||||
WarnPAM(File, Line);
|
||||
return;
|
||||
}
|
||||
if ((section = CheckLegacyGlobalOption(File, Line, Var, Arg))) {
|
||||
/** TODO: This function and support for these options in the
|
||||
* [Global] section could be removed starting with ngIRCd
|
||||
* release 19 (one release after marking it "deprecated"). */
|
||||
if (strncasecmp(Var, "SSL", 3) == 0) {
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Global\"): \"%s\" is deprecated here, move it to %s and rename to \"%s\"!",
|
||||
File, Line, Var, section,
|
||||
Var + 3);
|
||||
} else {
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Global\"): \"%s\" is deprecated here, move it to %s!",
|
||||
File, Line, Var, section);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Config_Error_Section(File, Line, Var, "Global");
|
||||
}
|
||||
|
||||
@@ -1642,6 +1505,12 @@ Handle_LIMITS(const char *File, int Line, char *Var, char *Arg)
|
||||
Config_Error_NaN(File, Line, Var);
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "MaxPenaltyTime") == 0) {
|
||||
Conf_MaxPenaltyTime = atol(Arg);
|
||||
if (Conf_MaxPenaltyTime < -1)
|
||||
Conf_MaxPenaltyTime = -1; /* "unlimited" */
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "PingTimeout") == 0) {
|
||||
Conf_PingTimeout = atoi(Arg);
|
||||
if (Conf_PingTimeout < 5) {
|
||||
@@ -1798,18 +1667,6 @@ Handle_OPTIONS(const char *File, int Line, char *Var, char *Arg)
|
||||
Conf_MorePrivacy = Check_ArgIsTrue(Arg);
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "NoticeAuth") == 0) {
|
||||
/*
|
||||
* TODO: This section and support for "NoticeAuth" variable
|
||||
* could be removed starting with ngIRCd release 24 (one
|
||||
* release after marking it "deprecated") ...
|
||||
*/
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Options\"): \"%s\" is deprecated, please use \"NoticeBeforeRegistration\"!",
|
||||
File, Line, Var);
|
||||
Conf_NoticeBeforeRegistration = Check_ArgIsTrue(Arg);
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "NoticeBeforeRegistration") == 0) {
|
||||
Conf_NoticeBeforeRegistration = Check_ArgIsTrue(Arg);
|
||||
return;
|
||||
@@ -1841,22 +1698,6 @@ Handle_OPTIONS(const char *File, int Line, char *Var, char *Arg)
|
||||
Config_Error_TooLong(File, Line, Var);
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "PredefChannelsOnly") == 0) {
|
||||
/*
|
||||
* TODO: This section and support for "PredefChannelsOnly"
|
||||
* could be removed starting with ngIRCd release 22 (one
|
||||
* release after marking it "deprecated") ...
|
||||
*/
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Options\"): \"%s\" is deprecated, please use \"AllowedChannelTypes\"!",
|
||||
File, Line, Var);
|
||||
if (Check_ArgIsTrue(Arg))
|
||||
Conf_AllowedChannelTypes[0] = '\0';
|
||||
else
|
||||
strlcpy(Conf_AllowedChannelTypes, CHANTYPES,
|
||||
sizeof(Conf_AllowedChannelTypes));
|
||||
return;
|
||||
}
|
||||
#ifndef STRICT_RFC
|
||||
if (strcasecmp(Var, "RequireAuthPing") == 0) {
|
||||
Conf_AuthPing = Check_ArgIsTrue(Arg);
|
||||
@@ -2146,8 +1987,12 @@ Handle_CHANNEL(const char *File, int Line, char *Var, char *Arg)
|
||||
}
|
||||
if (strcasecmp(Var, "Modes") == 0) {
|
||||
/* Initial modes */
|
||||
len = strlcpy(chan->modes, Arg, sizeof(chan->modes));
|
||||
if (len >= sizeof(chan->modes))
|
||||
if(chan->modes_num >= sizeof(chan->modes)) {
|
||||
Config_Error(LOG_ERR, "Too many Modes, option ignored.");
|
||||
return;
|
||||
}
|
||||
chan->modes[chan->modes_num++] = strndup(Arg, COMMAND_LEN);
|
||||
if(strlen(Arg) >= COMMAND_LEN)
|
||||
Config_Error_TooLong(File, Line, Var);
|
||||
return;
|
||||
}
|
||||
@@ -2163,6 +2008,9 @@ Handle_CHANNEL(const char *File, int Line, char *Var, char *Arg)
|
||||
len = strlcpy(chan->key, Arg, sizeof(chan->key));
|
||||
if (len >= sizeof(chan->key))
|
||||
Config_Error_TooLong(File, Line, Var);
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Channel\"): \"%s\" is deprecated here, use \"Modes = +k <key>\"!",
|
||||
File, Line, Var);
|
||||
return;
|
||||
}
|
||||
if( strcasecmp( Var, "MaxUsers" ) == 0 ) {
|
||||
@@ -2170,6 +2018,9 @@ Handle_CHANNEL(const char *File, int Line, char *Var, char *Arg)
|
||||
chan->maxusers = (unsigned long) atol(Arg);
|
||||
if (!chan->maxusers && strcmp(Arg, "0"))
|
||||
Config_Error_NaN(File, Line, Var);
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Channel\"): \"%s\" is deprecated here, use \"Modes = +l <limit>\"!",
|
||||
File, Line, Var);
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "KeyFile") == 0) {
|
||||
@@ -2225,7 +2076,8 @@ Validate_Config(bool Configtest, bool Rehash)
|
||||
break;
|
||||
} while (*(++ptr));
|
||||
|
||||
if (!Conf_ServerName[0]) {
|
||||
if (!Conf_ServerName[0] || !strchr(Conf_ServerName, '.'))
|
||||
{
|
||||
/* No server name configured! */
|
||||
config_valid = false;
|
||||
Config_Error(LOG_ALERT,
|
||||
@@ -2239,20 +2091,6 @@ Validate_Config(bool Configtest, bool Rehash)
|
||||
}
|
||||
}
|
||||
|
||||
if (Conf_ServerName[0] && !strchr(Conf_ServerName, '.')) {
|
||||
/* No dot in server name! */
|
||||
config_valid = false;
|
||||
Config_Error(LOG_ALERT,
|
||||
"Invalid server name configured in \"%s\" (section 'Global': 'Name'): Dot missing!",
|
||||
NGIRCd_ConfFile);
|
||||
if (!Configtest) {
|
||||
Config_Error(LOG_ALERT,
|
||||
"%s exiting due to fatal errors!",
|
||||
PACKAGE_NAME);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef STRICT_RFC
|
||||
if (!Conf_ServerAdminMail[0]) {
|
||||
/* No administrative contact configured! */
|
||||
@@ -2282,6 +2120,11 @@ Validate_Config(bool Configtest, bool Rehash)
|
||||
"This server uses PAM, \"Password\" in [Global] section will be ignored!");
|
||||
#endif
|
||||
|
||||
if (Conf_MaxPenaltyTime != -1)
|
||||
Config_Error(LOG_WARNING,
|
||||
"Maximum penalty increase ('MaxPenaltyTime') is set to %ld, this is not recommended!",
|
||||
Conf_MaxPenaltyTime);
|
||||
|
||||
#ifdef DEBUG
|
||||
servers = servers_once = 0;
|
||||
for (i = 0; i < MAX_SERVERS; i++) {
|
||||
|
@@ -29,7 +29,7 @@
|
||||
|
||||
/**
|
||||
* Configured IRC operator.
|
||||
* Please note the the name of the IRC operaor and his nick have nothing to
|
||||
* Please note that the name of the IRC operator and his nick have nothing to
|
||||
* do with each other! The IRC operator is only identified by the name and
|
||||
* password configured in this structure.
|
||||
*/
|
||||
@@ -83,11 +83,12 @@ struct SSLOptions {
|
||||
/** Pre-defined channels */
|
||||
struct Conf_Channel {
|
||||
char name[CHANNEL_NAME_LEN]; /**< Name of the channel */
|
||||
char modes[CHANNEL_MODE_LEN]; /**< Initial channel modes */
|
||||
char *modes[512]; /**< Initial channel modes to evaluate */
|
||||
char key[CLIENT_PASS_LEN]; /**< Channel key ("password", mode "k" ) */
|
||||
char topic[COMMAND_LEN]; /**< Initial topic */
|
||||
char keyfile[512]; /**< Path and name of channel key file */
|
||||
unsigned long maxusers; /**< User limit for this channel, mode "l" */
|
||||
unsigned int modes_num; /**< Number of channel modes to evaluate */
|
||||
};
|
||||
|
||||
|
||||
@@ -239,6 +240,9 @@ GLOBAL unsigned int Conf_MaxNickLength;
|
||||
/** Maximum number of channels returned to /list */
|
||||
GLOBAL int Conf_MaxListSize;
|
||||
|
||||
/** Maximium seconds to add per "penalty". -1 = unlimited. */
|
||||
GLOBAL time_t Conf_MaxPenaltyTime;
|
||||
|
||||
#ifndef STRICT_RFC
|
||||
|
||||
/** Require "AUTH PING-PONG" on login */
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2018 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
|
||||
@@ -26,6 +26,7 @@
|
||||
#endif
|
||||
#include "conn.h"
|
||||
|
||||
#include "conf.h"
|
||||
#include "conn-func.h"
|
||||
|
||||
/**
|
||||
@@ -44,13 +45,17 @@ Conn_UpdateIdle(CONN_ID Idx)
|
||||
/**
|
||||
* Update "ping timestamp", the time of the last outgoing PING request.
|
||||
*
|
||||
* the value 0 signals a newly connected client including servers during the
|
||||
* initial "server burst"; and 1 means that no PONG is pending for a PING.
|
||||
*
|
||||
* @param Idx Connection index.
|
||||
* @param TimeStamp 0, 1, or time stamp.
|
||||
*/
|
||||
GLOBAL void
|
||||
Conn_UpdatePing(CONN_ID Idx)
|
||||
Conn_UpdatePing(CONN_ID Idx, time_t TimeStamp)
|
||||
{
|
||||
assert(Idx > NONE);
|
||||
My_Connections[Idx].lastping = time(NULL);
|
||||
My_Connections[Idx].lastping = TimeStamp;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -85,7 +90,7 @@ Conn_LastPing( CONN_ID Idx )
|
||||
* is read. This function only increases the penalty, it is not possible to
|
||||
* decrease the penalty time.
|
||||
*
|
||||
* @param Idex Connection index.
|
||||
* @param Idx Connection index.
|
||||
* @param Seconds Seconds to add.
|
||||
* @see Conn_ResetPenalty
|
||||
*/
|
||||
@@ -97,6 +102,14 @@ Conn_SetPenalty(CONN_ID Idx, time_t Seconds)
|
||||
assert(Idx > NONE);
|
||||
assert(Seconds >= 0);
|
||||
|
||||
/* Limit new penalty to maximum configured, when less than 10 seconds. *
|
||||
The latter is used to limit brute force attacks, therefore we don't *
|
||||
want to limit that! */
|
||||
if (Conf_MaxPenaltyTime >= 0
|
||||
&& Seconds > Conf_MaxPenaltyTime
|
||||
&& Seconds < 10)
|
||||
Seconds = Conf_MaxPenaltyTime;
|
||||
|
||||
t = time(NULL);
|
||||
if (My_Connections[Idx].delaytime < t)
|
||||
My_Connections[Idx].delaytime = t;
|
||||
|
@@ -30,7 +30,7 @@
|
||||
|
||||
|
||||
GLOBAL void Conn_UpdateIdle PARAMS((CONN_ID Idx));
|
||||
GLOBAL void Conn_UpdatePing PARAMS((CONN_ID Idx));
|
||||
GLOBAL void Conn_UpdatePing PARAMS((CONN_ID Idx, time_t TimeStamp));
|
||||
|
||||
GLOBAL time_t Conn_GetSignon PARAMS((CONN_ID Idx));
|
||||
GLOBAL time_t Conn_GetIdle PARAMS(( CONN_ID Idx ));
|
||||
|
@@ -42,6 +42,7 @@ extern struct SSLOptions Conf_SSLOptions;
|
||||
#ifdef HAVE_LIBSSL
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/dh.h>
|
||||
|
||||
static SSL_CTX * ssl_ctx;
|
||||
static DH *dh_params;
|
||||
@@ -61,9 +62,17 @@ static bool ConnSSL_LoadServerKey_openssl PARAMS(( SSL_CTX *c ));
|
||||
|
||||
#define MAX_HASH_SIZE 64 /* from gnutls-int.h */
|
||||
|
||||
static gnutls_certificate_credentials_t x509_cred;
|
||||
typedef struct {
|
||||
int refcnt;
|
||||
gnutls_certificate_credentials_t x509_cred;
|
||||
gnutls_dh_params_t dh_params;
|
||||
} x509_cred_slot;
|
||||
|
||||
static array x509_creds = INIT_ARRAY;
|
||||
static size_t x509_cred_idx;
|
||||
|
||||
static gnutls_dh_params_t dh_params;
|
||||
static gnutls_priority_t priorities_cache;
|
||||
static gnutls_priority_t priorities_cache = NULL;
|
||||
static bool ConnSSL_LoadServerKey_gnutls PARAMS(( void ));
|
||||
#endif
|
||||
|
||||
@@ -265,6 +274,21 @@ void ConnSSL_Free(CONNECTION *c)
|
||||
gnutls_bye(sess, GNUTLS_SHUT_RDWR);
|
||||
gnutls_deinit(sess);
|
||||
}
|
||||
x509_cred_slot *slot = array_get(&x509_creds, sizeof(x509_cred_slot), c->ssl_state.x509_cred_idx);
|
||||
assert(slot != NULL);
|
||||
assert(slot->refcnt > 0);
|
||||
assert(slot->x509_cred != NULL);
|
||||
slot->refcnt--;
|
||||
if ((c->ssl_state.x509_cred_idx != x509_cred_idx) && (slot->refcnt <= 0)) {
|
||||
Log(LOG_INFO, "Discarding X509 certificate credentials from slot %zd.",
|
||||
c->ssl_state.x509_cred_idx);
|
||||
gnutls_certificate_free_keys(slot->x509_cred);
|
||||
gnutls_certificate_free_credentials(slot->x509_cred);
|
||||
slot->x509_cred = NULL;
|
||||
gnutls_dh_params_deinit(slot->dh_params);
|
||||
slot->dh_params = NULL;
|
||||
slot->refcnt = 0;
|
||||
}
|
||||
#endif
|
||||
assert(Conn_OPTION_ISSET(c, CONN_SSL));
|
||||
/* can't just set bitmask to 0 -- there are other, non-ssl related flags, e.g. CONN_ZIP. */
|
||||
@@ -310,8 +334,18 @@ ConnSSL_InitLibrary( void )
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!ConnSSL_LoadServerKey_openssl(newctx))
|
||||
if (!ConnSSL_LoadServerKey_openssl(newctx)) {
|
||||
/* Failed to read new key but an old ssl context
|
||||
* already exists -> reuse old context */
|
||||
if (ssl_ctx) {
|
||||
SSL_CTX_free(newctx);
|
||||
Log(LOG_WARNING,
|
||||
"Re-Initializing of SSL failed, using old keys!");
|
||||
return true;
|
||||
}
|
||||
/* No preexisting old context -> error. */
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (SSL_CTX_set_cipher_list(newctx, Conf_SSLOptions.CipherList) == 0) {
|
||||
Log(LOG_ERR, "Failed to apply OpenSSL cipher list \"%s\"!",
|
||||
@@ -326,7 +360,7 @@ ConnSSL_InitLibrary( void )
|
||||
Verify_openssl);
|
||||
SSL_CTX_free(ssl_ctx);
|
||||
ssl_ctx = newctx;
|
||||
Log(LOG_INFO, "%s initialized.", SSLeay_version(SSLEAY_VERSION));
|
||||
Log(LOG_INFO, "%s initialized.", OpenSSL_version(OPENSSL_VERSION));
|
||||
return true;
|
||||
out:
|
||||
SSL_CTX_free(newctx);
|
||||
@@ -337,22 +371,21 @@ out:
|
||||
int err;
|
||||
static bool initialized;
|
||||
|
||||
if (initialized) {
|
||||
/* TODO: cannot reload gnutls keys: can't simply free x509
|
||||
* context -- it may still be in use */
|
||||
return false;
|
||||
}
|
||||
|
||||
err = gnutls_global_init();
|
||||
if (err) {
|
||||
Log(LOG_ERR, "Failed to initialize GnuTLS: %s",
|
||||
gnutls_strerror(err));
|
||||
goto out;
|
||||
if (!initialized) {
|
||||
err = gnutls_global_init();
|
||||
if (err) {
|
||||
Log(LOG_ERR, "Failed to initialize GnuTLS: %s",
|
||||
gnutls_strerror(err));
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ConnSSL_LoadServerKey_gnutls())
|
||||
goto out;
|
||||
|
||||
if (priorities_cache != NULL) {
|
||||
gnutls_priority_deinit(priorities_cache);
|
||||
}
|
||||
if (gnutls_priority_init(&priorities_cache, Conf_SSLOptions.CipherList,
|
||||
NULL) != GNUTLS_E_SUCCESS) {
|
||||
Log(LOG_ERR,
|
||||
@@ -378,6 +411,9 @@ ConnSSL_LoadServerKey_gnutls(void)
|
||||
int err;
|
||||
const char *cert_file;
|
||||
|
||||
x509_cred_slot *slot = NULL;
|
||||
gnutls_certificate_credentials_t x509_cred;
|
||||
|
||||
err = gnutls_certificate_allocate_credentials(&x509_cred);
|
||||
if (err < 0) {
|
||||
Log(LOG_ERR, "Failed to allocate certificate credentials: %s",
|
||||
@@ -408,6 +444,43 @@ ConnSSL_LoadServerKey_gnutls(void)
|
||||
gnutls_strerror(err));
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Free currently active x509 context (if any) unless it is still in use */
|
||||
slot = array_get(&x509_creds, sizeof(x509_cred_slot), x509_cred_idx);
|
||||
if ((slot != NULL) && (slot->refcnt <= 0) && (slot->x509_cred != NULL)) {
|
||||
Log(LOG_INFO, "Discarding X509 certificate credentials from slot %zd.", x509_cred_idx);
|
||||
gnutls_certificate_free_keys(slot->x509_cred);
|
||||
gnutls_certificate_free_credentials(slot->x509_cred);
|
||||
slot->x509_cred = NULL;
|
||||
gnutls_dh_params_deinit(slot->dh_params);
|
||||
slot->dh_params = NULL;
|
||||
slot->refcnt = 0;
|
||||
}
|
||||
|
||||
/* Find free slot */
|
||||
x509_cred_idx = (size_t) -1;
|
||||
size_t i;
|
||||
for (slot = array_start(&x509_creds), i = 0;
|
||||
i < array_length(&x509_creds, sizeof(x509_cred_slot));
|
||||
slot++, i++) {
|
||||
if (slot->refcnt <= 0) {
|
||||
x509_cred_idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* ... allocate new slot otherwise. */
|
||||
if (x509_cred_idx == (size_t) -1) {
|
||||
x509_cred_idx = array_length(&x509_creds, sizeof(x509_cred_slot));
|
||||
slot = array_alloc(&x509_creds, sizeof(x509_cred_slot), x509_cred_idx);
|
||||
if (slot == NULL) {
|
||||
Log(LOG_ERR, "Failed to allocate new slot for certificate credentials");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Log(LOG_INFO, "Storing new X509 certificate credentials in slot %zd.", x509_cred_idx);
|
||||
slot->x509_cred = x509_cred;
|
||||
slot->refcnt = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
@@ -509,8 +582,13 @@ ConnSSL_Init_SSL(CONNECTION *c)
|
||||
(gnutls_transport_ptr_t) (long) c->sock);
|
||||
gnutls_certificate_server_set_request(c->ssl_state.gnutls_session,
|
||||
GNUTLS_CERT_REQUEST);
|
||||
|
||||
Log(LOG_INFO, "Using X509 credentials from slot %zd", x509_cred_idx);
|
||||
c->ssl_state.x509_cred_idx = x509_cred_idx;
|
||||
x509_cred_slot *slot = array_get(&x509_creds, sizeof(x509_cred_slot), x509_cred_idx);
|
||||
slot->refcnt++;
|
||||
ret = gnutls_credentials_set(c->ssl_state.gnutls_session,
|
||||
GNUTLS_CRD_CERTIFICATE, x509_cred);
|
||||
GNUTLS_CRD_CERTIFICATE, slot->x509_cred);
|
||||
if (ret != 0) {
|
||||
Log(LOG_ERR, "Failed to set SSL credentials: %s",
|
||||
gnutls_strerror(ret));
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* 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
|
||||
@@ -10,6 +10,7 @@
|
||||
*/
|
||||
|
||||
#define CONN_MODULE
|
||||
#define CONN_MODULE_GLOBAL_INIT
|
||||
|
||||
#include "portab.h"
|
||||
|
||||
@@ -556,8 +557,8 @@ InitSinaddrListenAddr(ng_ipaddr_t *addr, const char *listen_addrstr, UINT16 Port
|
||||
if (!ret) {
|
||||
assert(listen_addrstr);
|
||||
Log(LOG_CRIT,
|
||||
"Can't bind to [%s]:%u: can't convert ip address \"%s\"!",
|
||||
listen_addrstr, Port, listen_addrstr);
|
||||
"Can't listen on [%s]:%u: Failed to parse IP address!",
|
||||
listen_addrstr, Port);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -659,9 +660,14 @@ Conn_Handler(void)
|
||||
size_t wdatalen;
|
||||
struct timeval tv;
|
||||
time_t t;
|
||||
bool command_available;
|
||||
|
||||
Log(LOG_NOTICE, "Server \"%s\" (on \"%s\") ready.",
|
||||
Client_ID(Client_ThisServer()), Client_Hostname(Client_ThisServer()));
|
||||
|
||||
while (!NGIRCd_SignalQuit && !NGIRCd_SignalRestart) {
|
||||
t = time(NULL);
|
||||
command_available = false;
|
||||
|
||||
/* Check configured servers and established links */
|
||||
Check_Servers();
|
||||
@@ -730,16 +736,31 @@ Conn_Handler(void)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (array_bytes(&My_Connections[i].rbuf) >= COMMAND_LEN) {
|
||||
/* There is still more data in the read buffer
|
||||
* than a single valid command can get long:
|
||||
* so either there is a complete command, or
|
||||
* invalid data. Therefore don't try to read in
|
||||
* even more data from the network but wait for
|
||||
* this command(s) to be handled first! */
|
||||
io_event_del(My_Connections[i].sock,
|
||||
IO_WANTREAD);
|
||||
command_available = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
io_event_add(My_Connections[i].sock, IO_WANTREAD);
|
||||
}
|
||||
|
||||
/* Set the timeout for reading from the network to 1 second,
|
||||
* which is the granularity with witch we handle "penalty
|
||||
* times" for example.
|
||||
/* Don't wait for data when there is still at least one command
|
||||
* available in a read buffer which can be handled immediately;
|
||||
* set the timeout for reading from the network to 1 second
|
||||
* otherwise, which is the granularity with witch we handle
|
||||
* "penalty times" for example.
|
||||
* Note: tv_sec/usec are undefined(!) after io_dispatch()
|
||||
* returns, so we have to set it before each call to it! */
|
||||
tv.tv_usec = 0;
|
||||
tv.tv_sec = 1;
|
||||
tv.tv_sec = command_available ? 0 : 1;
|
||||
|
||||
/* Wait for activity ... */
|
||||
i = io_dispatch(&tv);
|
||||
@@ -1081,9 +1102,9 @@ Conn_Close(CONN_ID Idx, const char *LogMsg, const char *FwdMsg, bool InformClien
|
||||
* the calculation of in_p and out_p: in_z_k and out_z_k
|
||||
* are non-zero, that's guaranteed by the protocol until
|
||||
* compression can be enabled. */
|
||||
if (! in_z_k)
|
||||
if (in_z_k <= 0)
|
||||
in_z_k = in_k;
|
||||
if (! out_z_k)
|
||||
if (out_z_k <= 0)
|
||||
out_z_k = out_k;
|
||||
in_p = (int)(( in_k * 100 ) / in_z_k );
|
||||
out_p = (int)(( out_k * 100 ) / out_z_k );
|
||||
@@ -1268,6 +1289,9 @@ Handle_Write( CONN_ID Idx )
|
||||
if (errno == EAGAIN || errno == EINTR)
|
||||
return true;
|
||||
|
||||
/* Log write errors but do not close the connection yet.
|
||||
* Calling Conn_Close() now could result in too many recursive calls.
|
||||
*/
|
||||
if (!Conn_OPTION_ISSET(&My_Connections[Idx], CONN_ISCLOSING))
|
||||
Log(LOG_ERR,
|
||||
"Write error on connection %d (socket %d): %s!",
|
||||
@@ -1275,7 +1299,7 @@ Handle_Write( CONN_ID Idx )
|
||||
else
|
||||
LogDebug("Recursive write error on connection %d (socket %d): %s!",
|
||||
Idx, My_Connections[Idx].sock, strerror(errno));
|
||||
Conn_Close(Idx, "Write error", NULL, false);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1536,16 +1560,21 @@ Socket2Index( int Sock )
|
||||
* @param Idx Connection index.
|
||||
*/
|
||||
static void
|
||||
Read_Request( CONN_ID Idx )
|
||||
Read_Request(CONN_ID Idx)
|
||||
{
|
||||
ssize_t len;
|
||||
static const unsigned int maxbps = COMMAND_LEN / 2;
|
||||
char readbuf[READBUFFER_LEN];
|
||||
time_t t;
|
||||
CLIENT *c;
|
||||
assert( Idx > NONE );
|
||||
assert( My_Connections[Idx].sock > NONE );
|
||||
|
||||
assert(Idx > NONE);
|
||||
assert(My_Connections[Idx].sock > NONE);
|
||||
|
||||
/* Check if the read buffer is "full". Basically this shouldn't happen
|
||||
* here, because as long as there possibly are commands in the read
|
||||
* buffer (buffer usage > COMMAND_LEN), the socket shouldn't be
|
||||
* scheduled for reading in Conn_Handler() at all ... */
|
||||
#ifdef ZLIB
|
||||
if ((array_bytes(&My_Connections[Idx].rbuf) >= READBUFFER_LEN) ||
|
||||
(array_bytes(&My_Connections[Idx].zip.rbuf) >= READBUFFER_LEN))
|
||||
@@ -1553,7 +1582,6 @@ Read_Request( CONN_ID Idx )
|
||||
if (array_bytes(&My_Connections[Idx].rbuf) >= READBUFFER_LEN)
|
||||
#endif
|
||||
{
|
||||
/* Read buffer is full */
|
||||
Log(LOG_ERR,
|
||||
"Receive buffer space exhausted (connection %d): %d/%d bytes",
|
||||
Idx, array_bytes(&My_Connections[Idx].rbuf), READBUFFER_LEN);
|
||||
@@ -1561,12 +1589,14 @@ Read_Request( CONN_ID Idx )
|
||||
return;
|
||||
}
|
||||
|
||||
/* Now read new data from the network, up to READBUFFER_LEN bytes ... */
|
||||
#ifdef SSL_SUPPORT
|
||||
if (Conn_OPTION_ISSET(&My_Connections[Idx], CONN_SSL))
|
||||
len = ConnSSL_Read( &My_Connections[Idx], readbuf, sizeof(readbuf));
|
||||
len = ConnSSL_Read(&My_Connections[Idx], readbuf, sizeof(readbuf));
|
||||
else
|
||||
#endif
|
||||
len = read(My_Connections[Idx].sock, readbuf, sizeof(readbuf));
|
||||
len = read(My_Connections[Idx].sock, readbuf, sizeof(readbuf));
|
||||
|
||||
if (len == 0) {
|
||||
LogDebug("Client \"%s:%u\" is closing connection %d ...",
|
||||
My_Connections[Idx].host,
|
||||
@@ -1576,13 +1606,20 @@ Read_Request( CONN_ID Idx )
|
||||
}
|
||||
|
||||
if (len < 0) {
|
||||
if( errno == EAGAIN ) return;
|
||||
if (errno == EAGAIN)
|
||||
return;
|
||||
|
||||
Log(LOG_ERR, "Read error on connection %d (socket %d): %s!",
|
||||
Idx, My_Connections[Idx].sock, strerror(errno));
|
||||
Conn_Close(Idx, "Read error", "Client closed connection",
|
||||
false);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Now append the newly received data to the connection buffer.
|
||||
* NOTE: This can lead to connection read buffers being bigger(!) than
|
||||
* READBUFFER_LEN bytes, as we add up to READBUFFER_LEN new bytes to a
|
||||
* buffer possibly being "almost" READBUFFER_LEN bytes already! */
|
||||
#ifdef ZLIB
|
||||
if (Conn_OPTION_ISSET(&My_Connections[Idx], CONN_ZIP)) {
|
||||
if (!array_catb(&My_Connections[Idx].zip.rbuf, readbuf,
|
||||
@@ -1829,6 +1866,9 @@ Check_Connections(void)
|
||||
CLIENT *c;
|
||||
CONN_ID i;
|
||||
char msg[64];
|
||||
time_t time_now;
|
||||
|
||||
time_now = time(NULL);
|
||||
|
||||
for (i = 0; i < Pool_Size; i++) {
|
||||
if (My_Connections[i].sock < 0)
|
||||
@@ -1843,7 +1883,7 @@ Check_Connections(void)
|
||||
My_Connections[i].lastdata) {
|
||||
/* We already sent a ping */
|
||||
if (My_Connections[i].lastping <
|
||||
time(NULL) - Conf_PongTimeout) {
|
||||
time_now - Conf_PongTimeout) {
|
||||
/* Timeout */
|
||||
snprintf(msg, sizeof(msg),
|
||||
"Ping timeout: %d seconds",
|
||||
@@ -1852,10 +1892,10 @@ Check_Connections(void)
|
||||
Conn_Close(i, NULL, msg, true);
|
||||
}
|
||||
} else if (My_Connections[i].lastdata <
|
||||
time(NULL) - Conf_PingTimeout) {
|
||||
time_now - Conf_PingTimeout) {
|
||||
/* We need to send a PING ... */
|
||||
LogDebug("Connection %d: sending PING ...", i);
|
||||
Conn_UpdatePing(i);
|
||||
Conn_UpdatePing(i, time_now);
|
||||
Conn_WriteStr(i, "PING :%s",
|
||||
Client_ID(Client_ThisServer()));
|
||||
}
|
||||
@@ -1866,7 +1906,7 @@ Check_Connections(void)
|
||||
* still not registered. */
|
||||
|
||||
if (My_Connections[i].lastdata <
|
||||
time(NULL) - Conf_PongTimeout) {
|
||||
time_now - Conf_PongTimeout) {
|
||||
LogDebug
|
||||
("Unregistered connection %d timed out ...",
|
||||
i);
|
||||
@@ -1918,8 +1958,11 @@ Check_Servers(void)
|
||||
Conf_Server[i].lasttry = time_now;
|
||||
Conf_Server[i].conn_id = SERVER_WAIT;
|
||||
assert(Proc_GetPipeFd(&Conf_Server[i].res_stat) < 0);
|
||||
Resolve_Name(&Conf_Server[i].res_stat, Conf_Server[i].host,
|
||||
cb_Connect_to_Server);
|
||||
|
||||
/* Start resolver subprocess ... */
|
||||
if (!Resolve_Name(&Conf_Server[i].res_stat, Conf_Server[i].host,
|
||||
cb_Connect_to_Server))
|
||||
Conf_Server[i].conn_id = NONE;
|
||||
}
|
||||
} /* Check_Servers */
|
||||
|
||||
@@ -2399,7 +2442,7 @@ Conn_GetFromProc(int fd)
|
||||
* @param Reason The reason, see THROTTLE_xxx constants.
|
||||
* @param Idx The connection index.
|
||||
* @param Client The client of this connection.
|
||||
* @param Seconds The time to delay this connection.
|
||||
* @param Value The time to delay this connection.
|
||||
*/
|
||||
static void
|
||||
Throttle_Connection(const CONN_ID Idx, CLIENT *Client, const int Reason,
|
||||
|
@@ -105,9 +105,17 @@ typedef struct _Connection
|
||||
#endif
|
||||
} CONNECTION;
|
||||
|
||||
GLOBAL CONNECTION *My_Connections;
|
||||
GLOBAL CONN_ID Pool_Size;
|
||||
GLOBAL long WCounter;
|
||||
|
||||
#ifdef CONN_MODULE_GLOBAL_INIT
|
||||
CONNECTION *My_Connections;
|
||||
CONN_ID Pool_Size;
|
||||
long WCounter;
|
||||
#else
|
||||
extern CONNECTION *My_Connections;
|
||||
extern CONN_ID Pool_Size;
|
||||
extern long WCounter;
|
||||
#endif
|
||||
|
||||
|
||||
#define CONNECTION2ID(x) (long)(x - My_Connections)
|
||||
|
||||
|
@@ -130,7 +130,7 @@
|
||||
#define CLIENT_MODE_LEN 21
|
||||
|
||||
/** Max. length of server info texts (including NULL). */
|
||||
#define CLIENT_INFO_LEN 64
|
||||
#define CLIENT_INFO_LEN 128
|
||||
|
||||
/** Max. length of away messages (including NULL). */
|
||||
#define CLIENT_AWAY_LEN 128
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2018 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
|
||||
@@ -497,7 +497,7 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
|
||||
topic_power = true;
|
||||
|
||||
if (Req->argc == 1) {
|
||||
/* Request actual topic */
|
||||
/* Request current topic */
|
||||
topic = Channel_Topic(chan);
|
||||
if (*topic) {
|
||||
r = IRC_WriteStrClient(from, RPL_TOPIC_MSG,
|
||||
@@ -532,8 +532,6 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
|
||||
Channel_Name(chan));
|
||||
}
|
||||
|
||||
/* Set new topic */
|
||||
Channel_SetTopic(chan, from, Req->argv[1]);
|
||||
LogDebug("%s \"%s\" set topic on \"%s\": %s",
|
||||
Client_TypeText(from), Client_Mask(from), Channel_Name(chan),
|
||||
Req->argv[1][0] ? Req->argv[1] : "<none>");
|
||||
@@ -545,9 +543,17 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
|
||||
if (!Channel_IsLocal(chan))
|
||||
IRC_WriteStrServersPrefix(Client, from, "TOPIC %s :%s",
|
||||
Req->argv[0], Req->argv[1]);
|
||||
IRC_WriteStrChannelPrefix(Client, chan, from, false, "TOPIC %s :%s",
|
||||
Req->argv[0], Req->argv[1]);
|
||||
|
||||
/* Infrom local clients, but only when the topic really changed. */
|
||||
if (strcmp(Req->argv[1], Channel_Topic(chan)) != 0)
|
||||
IRC_WriteStrChannelPrefix(Client, chan, from, false,
|
||||
"TOPIC %s :%s", Req->argv[0],
|
||||
Req->argv[1]);
|
||||
|
||||
/* Update topic, setter, and timestamp. */
|
||||
Channel_SetTopic(chan, from, Req->argv[1]);
|
||||
|
||||
/* Send confirmation when the local client is a user. */
|
||||
if (Client_Type(Client) == CLIENT_USER)
|
||||
return IRC_WriteStrClientPrefix(Client, Client, "TOPIC %s :%s",
|
||||
Req->argv[0], Req->argv[1]);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2018 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
|
||||
@@ -89,7 +89,7 @@ IRC_PASS( CLIENT *Client, REQUEST *Req )
|
||||
|
||||
/* Protocol version */
|
||||
if (Req->argc >= 2 && strlen(Req->argv[1]) >= 4) {
|
||||
int c2, c4;
|
||||
char c2, c4;
|
||||
|
||||
c2 = Req->argv[1][2];
|
||||
c4 = Req->argv[1][4];
|
||||
@@ -877,11 +877,20 @@ IRC_PONG(CLIENT *Client, REQUEST *Req)
|
||||
(long)(time(NULL) - Conn_GetSignon(conn)),
|
||||
time(NULL) - Conn_GetSignon(conn) == 1 ? "" : "s",
|
||||
Client_UserCount(), Channel_CountVisible(NULL));
|
||||
Conn_UpdatePing(conn);
|
||||
} else
|
||||
LogDebug("Connection %d: received PONG. Lag: %ld seconds.",
|
||||
conn, (long)(time(NULL) - Conn_LastPing(conn)));
|
||||
}
|
||||
#ifdef DEBUG
|
||||
else {
|
||||
if (Conn_LastPing(conn) > 1)
|
||||
LogDebug("Connection %d: received PONG. Lag: %ld seconds.",
|
||||
conn, (long)(time(NULL) - Conn_LastPing(conn)));
|
||||
else
|
||||
LogDebug("Got unexpected PONG on connection %d. Ignored.",
|
||||
conn);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* We got a PONG, so signal that none is pending on this connection. */
|
||||
Conn_UpdatePing(conn, 1);
|
||||
return CONNECTED;
|
||||
} /* IRC_PONG */
|
||||
|
||||
|
@@ -447,10 +447,11 @@ IRC_xLINE(CLIENT *Client, REQUEST *Req)
|
||||
if (Class_AddMask(class, Req->argv[0],
|
||||
timeout,
|
||||
Req->argv[2])) {
|
||||
Log(LOG_NOTICE|LOG_snotice,
|
||||
"\"%s\" added \"%s\" to %c-Line list: \"%s\" (%ld seconds).",
|
||||
Client_Mask(from), Req->argv[0], class_c,
|
||||
Req->argv[2], atol(Req->argv[1]));
|
||||
if (Client_Type(from) != CLIENT_SERVER)
|
||||
Log(LOG_NOTICE|LOG_snotice,
|
||||
"\"%s\" added \"%s\" to %c-Line list: \"%s\" (%ld seconds).",
|
||||
Client_Mask(from), Req->argv[0], class_c,
|
||||
Req->argv[2], atol(Req->argv[1]));
|
||||
if (class == CLASS_GLINE) {
|
||||
/* Inform other servers */
|
||||
IRC_WriteStrServersPrefix(Client, from,
|
||||
|
@@ -186,6 +186,15 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
|
||||
if (!Client_CheckID(Client, Req->argv[0]))
|
||||
return DISCONNECTED;
|
||||
|
||||
if (!Req->prefix) {
|
||||
/* We definitely need a prefix here! */
|
||||
Log(LOG_ALERT, "Got SERVER command without prefix! (on connection %d)",
|
||||
Client_Conn(Client));
|
||||
Conn_Close(Client_Conn(Client), NULL,
|
||||
"SERVER command without prefix", true);
|
||||
return DISCONNECTED;
|
||||
}
|
||||
|
||||
from = Client_Search( Req->prefix );
|
||||
if (! from) {
|
||||
/* Uh, Server, that introduced the new server is unknown?! */
|
||||
@@ -358,7 +367,7 @@ IRC_SQUIT(CLIENT * Client, REQUEST * Req)
|
||||
{
|
||||
char msg[COMMAND_LEN], logmsg[COMMAND_LEN];
|
||||
CLIENT *from, *target;
|
||||
CONN_ID con;
|
||||
CONN_ID con, client_con;
|
||||
int loglevel;
|
||||
|
||||
assert(Client != NULL);
|
||||
@@ -398,6 +407,7 @@ IRC_SQUIT(CLIENT * Client, REQUEST * Req)
|
||||
return CONNECTED;
|
||||
}
|
||||
|
||||
client_con = Client_Conn(Client);
|
||||
con = Client_Conn(target);
|
||||
|
||||
if (Req->argv[1][0])
|
||||
@@ -419,7 +429,7 @@ IRC_SQUIT(CLIENT * Client, REQUEST * Req)
|
||||
Req->argv[0], Client_ID(from),
|
||||
Req->argv[1][0] ? Req->argv[1] : "-");
|
||||
Conn_Close(con, NULL, msg, true);
|
||||
if (con == Client_Conn(Client))
|
||||
if (con == client_con)
|
||||
return DISCONNECTED;
|
||||
} else {
|
||||
/* This server is not directly connected, so the SQUIT must
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2018 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
|
||||
@@ -380,11 +380,10 @@ va_dcl
|
||||
* Send a message to all the servers in the network using a specific prefix
|
||||
* and matching a "client flag" using a callback function.
|
||||
*
|
||||
* @param Client The sending client, excluded while forwarding the message.
|
||||
* @param ExceptOf The sending client, excluded while forwarding the message.
|
||||
* @param Prefix The prefix to use.
|
||||
* @param Flag Client flag that must be set on the target.
|
||||
* @param callback Callback function.
|
||||
* @param Format Format string.
|
||||
*/
|
||||
GLOBAL void
|
||||
IRC_WriteStrServersPrefixFlag_CB(CLIENT *ExceptOf, CLIENT *Prefix, char Flag,
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2018 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
|
||||
@@ -112,7 +112,7 @@ IRC_ERROR(CLIENT *Client, REQUEST *Req)
|
||||
}
|
||||
|
||||
if (Client_Conn(Client) != NONE) {
|
||||
Client_Destroy(Client, NULL, msg, false);
|
||||
Conn_Close(Client_Conn(Client), NULL, msg, false);
|
||||
return DISCONNECTED;
|
||||
}
|
||||
|
||||
@@ -362,12 +362,8 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso
|
||||
return CONNECTED;
|
||||
}
|
||||
|
||||
/* Inform other servers */
|
||||
IRC_WriteStrServersPrefix(From ? Client : NULL,
|
||||
From ? From : Client_ThisServer(),
|
||||
"KILL %s :%s", Nick, Reason);
|
||||
|
||||
if (Client_Type(c) != CLIENT_USER && Client_Type(c) != CLIENT_GOTNICK) {
|
||||
if (Client_Type(c) != CLIENT_USER && Client_Type(c) != CLIENT_GOTNICK
|
||||
&& Client_Type(c) != CLIENT_SERVICE) {
|
||||
/* Target of this KILL is not a regular user, this is
|
||||
* invalid! So we ignore this case if we received a
|
||||
* regular KILL from the network and try to kill the
|
||||
@@ -388,6 +384,12 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso
|
||||
Client_Type(c), Nick);
|
||||
}
|
||||
|
||||
/* Inform other servers */
|
||||
IRC_WriteStrServersPrefix(From ? Client : NULL,
|
||||
From ? From : Client_ThisServer(),
|
||||
"KILL %s :%s", Nick, Reason);
|
||||
|
||||
|
||||
/* Save ID of this connection */
|
||||
if (Client)
|
||||
my_conn = Client_Conn(Client);
|
||||
@@ -413,7 +415,7 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso
|
||||
* Send help for a given topic to the client.
|
||||
*
|
||||
* @param Client The client requesting help.
|
||||
* @param Topoc The help topic requested.
|
||||
* @param Topic The help topic requested.
|
||||
* @return CONNECTED or DISCONNECTED.
|
||||
*/
|
||||
static bool
|
||||
@@ -481,11 +483,8 @@ Help(CLIENT *Client, const char *Topic)
|
||||
* @return Pointer to static (global) string buffer.
|
||||
*/
|
||||
static char *
|
||||
#ifdef ZLIB
|
||||
#if defined(SSL_SUPPORT) || defined(ZLIB)
|
||||
Option_String(CONN_ID Idx)
|
||||
#else
|
||||
Option_String(UNUSED CONN_ID Idx)
|
||||
#endif
|
||||
{
|
||||
static char option_txt[8];
|
||||
UINT16 options;
|
||||
@@ -505,6 +504,11 @@ Option_String(UNUSED CONN_ID Idx)
|
||||
#endif
|
||||
|
||||
return option_txt;
|
||||
#else
|
||||
Option_String(UNUSED CONN_ID Idx)
|
||||
{
|
||||
return "";
|
||||
#endif
|
||||
} /* Option_String */
|
||||
|
||||
/**
|
||||
@@ -690,7 +694,10 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
|
||||
goto send_next_target;
|
||||
}
|
||||
|
||||
if (Client_HasMode(cl, 'C')) {
|
||||
if (Client_HasMode(cl, 'C') &&
|
||||
!Client_HasMode(from, 'o') &&
|
||||
!(Client_Type(from) == CLIENT_SERVER) &&
|
||||
!(Client_Type(from) == CLIENT_SERVICE)) {
|
||||
cl2chan = Channel_FirstChannelOf(cl);
|
||||
while (cl2chan) {
|
||||
chan = Channel_GetChannel(cl2chan);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2018 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
|
||||
@@ -39,7 +39,7 @@ struct list_elem {
|
||||
/**
|
||||
* Get IRC mask stored in list element.
|
||||
*
|
||||
* @param list_elem List element.
|
||||
* @param e List element.
|
||||
* @return Pointer to IRC mask
|
||||
*/
|
||||
GLOBAL const char *
|
||||
@@ -52,7 +52,7 @@ Lists_GetMask(const struct list_elem *e)
|
||||
/**
|
||||
* Get optional "reason" text stored in list element.
|
||||
*
|
||||
* @param list_elem List element.
|
||||
* @param e List element.
|
||||
* @return Pointer to "reason" text or empty string ("").
|
||||
*/
|
||||
GLOBAL const char *
|
||||
@@ -65,7 +65,7 @@ Lists_GetReason(const struct list_elem *e)
|
||||
/**
|
||||
* Get "validity" value stored in list element.
|
||||
*
|
||||
* @param list_elem List element.
|
||||
* @param e List element.
|
||||
* @return Validity: 0=unlimited, >0 until this time stamp.
|
||||
*/
|
||||
GLOBAL time_t
|
||||
@@ -78,7 +78,7 @@ Lists_GetValidity(const struct list_elem *e)
|
||||
/**
|
||||
* Get "onlyonce" value stored in list element.
|
||||
*
|
||||
* @param list_elem List element.
|
||||
* @param e List element.
|
||||
* @return True if the element was stored for single use, false otherwise.
|
||||
*/
|
||||
GLOBAL bool
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* 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
|
||||
@@ -80,6 +80,7 @@ Log_Init(bool Daemon_Mode)
|
||||
openlog(PACKAGE, LOG_CONS|LOG_PID, 0);
|
||||
#endif
|
||||
#endif
|
||||
Log(LOG_NOTICE, "%s starting ...", NGIRCd_Version);
|
||||
} /* Log_Init */
|
||||
|
||||
|
||||
@@ -96,15 +97,13 @@ Log_ReInit(void)
|
||||
closelog();
|
||||
openlog(PACKAGE, LOG_CONS|LOG_PID, Conf_SyslogFacility);
|
||||
#endif
|
||||
Log(LOG_NOTICE, "%s started.", NGIRCd_Version);
|
||||
Log(LOG_INFO, "Using configuration file \"%s\" ...", NGIRCd_ConfFile);
|
||||
}
|
||||
|
||||
|
||||
GLOBAL void
|
||||
Log_Exit( void )
|
||||
{
|
||||
Log(LOG_INFO, "%s done%s, served %lu connection%s.", PACKAGE_NAME,
|
||||
Log(LOG_NOTICE, "%s done%s, served %lu connection%s.", PACKAGE_NAME,
|
||||
NGIRCd_SignalRestart ? " (restarting)" : "", Conn_CountAccepted(),
|
||||
Conn_CountAccepted() == 1 ? "" : "s");
|
||||
#ifdef SYSLOG
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2018 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
|
||||
@@ -77,7 +77,7 @@ MatchCaseInsensitive(const char *Pattern, const char *String)
|
||||
/**
|
||||
* Match string with pattern case-insensitive.
|
||||
*
|
||||
* @param pattern Pattern to match with
|
||||
* @param Pattern Pattern to match with
|
||||
* @param String Input string, at most COMMAND_LEN-1 characters long
|
||||
* @param Separator Character separating the individual patterns in the list
|
||||
* @return true if pattern matches
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 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
|
||||
@@ -23,7 +23,7 @@
|
||||
#define RPL_MYINFO_MSG "004 %s %s ngircd-%s %s %s"
|
||||
#define RPL_ISUPPORTNET_MSG "005 %s NETWORK=%s :is my network name"
|
||||
#define RPL_ISUPPORT1_MSG "005 %s RFC2812 IRCD=ngIRCd CHARSET=UTF-8 CASEMAPPING=ascii PREFIX=(qaohv)~&@%%+ CHANTYPES=%s CHANMODES=beI,k,l,imMnOPQRstVz CHANLIMIT=%s:%d :are supported on this server"
|
||||
#define RPL_ISUPPORT2_MSG "005 %s CHANNELLEN=%d NICKLEN=%d TOPICLEN=%d AWAYLEN=%d KICKLEN=%d MODES=%d MAXLIST=beI:%d EXCEPTS=e INVEX=I PENALTY :are supported on this server"
|
||||
#define RPL_ISUPPORT2_MSG "005 %s CHANNELLEN=%d NICKLEN=%d TOPICLEN=%d AWAYLEN=%d KICKLEN=%d MODES=%d MAXLIST=beI:%d EXCEPTS=e INVEX=I PENALTY FNC :are supported on this server"
|
||||
|
||||
#define RPL_TRACELINK_MSG "200 %s Link %s-%s %s %s V%s %ld %d %d"
|
||||
#define RPL_TRACEOPERATOR_MSG "204 %s Oper 2 :%s"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2017 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2021 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,6 +9,7 @@
|
||||
* Please read the file COPYING, README and AUTHORS for more information.
|
||||
*/
|
||||
|
||||
#define GLOBAL_INIT
|
||||
#include "portab.h"
|
||||
|
||||
/**
|
||||
@@ -125,7 +126,7 @@ main(int argc, const char *argv[])
|
||||
if (strcmp(argv[i], "--help") == 0) {
|
||||
Show_Version();
|
||||
puts(""); Show_Help( ); puts( "" );
|
||||
exit(1);
|
||||
exit(0);
|
||||
}
|
||||
if (strcmp(argv[i], "--nodaemon") == 0) {
|
||||
NGIRCd_NoDaemon = true;
|
||||
@@ -143,7 +144,7 @@ main(int argc, const char *argv[])
|
||||
#endif
|
||||
if (strcmp(argv[i], "--version") == 0) {
|
||||
Show_Version();
|
||||
exit(1);
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
else if(argv[i][0] == '-' && argv[i][1] != '-') {
|
||||
@@ -200,21 +201,23 @@ main(int argc, const char *argv[])
|
||||
}
|
||||
|
||||
if (!ok) {
|
||||
printf("%s: invalid option \"-%c\"!\n",
|
||||
PACKAGE_NAME, argv[i][n]);
|
||||
printf("Try \"%s --help\" for more information.\n",
|
||||
PACKAGE_NAME);
|
||||
exit(1);
|
||||
fprintf(stderr,
|
||||
"%s: invalid option \"-%c\"!\n",
|
||||
PACKAGE_NAME, argv[i][n]);
|
||||
fprintf(stderr,
|
||||
"Try \"%s --help\" for more information.\n",
|
||||
PACKAGE_NAME);
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if (!ok) {
|
||||
printf("%s: invalid option \"%s\"!\n",
|
||||
PACKAGE_NAME, argv[i]);
|
||||
printf("Try \"%s --help\" for more information.\n",
|
||||
PACKAGE_NAME);
|
||||
exit(1);
|
||||
fprintf(stderr, "%s: invalid option \"%s\"!\n",
|
||||
PACKAGE_NAME, argv[i]);
|
||||
fprintf(stderr, "Try \"%s --help\" for more information.\n",
|
||||
PACKAGE_NAME);
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,26 +249,18 @@ main(int argc, const char *argv[])
|
||||
NGIRCd_SignalRestart = false;
|
||||
NGIRCd_SignalQuit = false;
|
||||
|
||||
/* Initialize modules, part I */
|
||||
Log_Init(!NGIRCd_NoDaemon);
|
||||
Random_Init();
|
||||
Conf_Init();
|
||||
Log_ReInit();
|
||||
|
||||
/* Initialize the "main program": chroot environment, user and
|
||||
* group ID, ... */
|
||||
/* Initialize the "main program":
|
||||
* chroot environment, user and group ID, ... */
|
||||
if (!NGIRCd_Init(NGIRCd_NoDaemon)) {
|
||||
Log(LOG_ALERT, "Fatal: Initialization failed, exiting!");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Initialize modules, part II: these functions are eventually
|
||||
* called with already dropped privileges ... */
|
||||
Channel_Init();
|
||||
Client_Init();
|
||||
Conn_Init();
|
||||
Class_Init();
|
||||
|
||||
if (!io_library_init(CONNECTION_POOL)) {
|
||||
Log(LOG_ALERT,
|
||||
"Fatal: Could not initialize IO routines: %s",
|
||||
@@ -280,6 +275,11 @@ main(int argc, const char *argv[])
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Channel_Init();
|
||||
Conn_Init();
|
||||
Class_Init();
|
||||
Client_Init();
|
||||
|
||||
/* Create protocol and server identification. The syntax
|
||||
* used by ngIRCd in PASS commands and the known "extended
|
||||
* flags" are described in doc/Protocol.txt. */
|
||||
@@ -451,7 +451,7 @@ static void
|
||||
Show_Version( void )
|
||||
{
|
||||
puts( NGIRCd_Version );
|
||||
puts( "Copyright (c)2001-2017 Alexander Barton (<alex@barton.de>) and Contributors." );
|
||||
puts( "Copyright (c)2001-2021 Alexander Barton (<alex@barton.de>) and Contributors." );
|
||||
puts( "Homepage: <http://ngircd.barton.de/>\n" );
|
||||
puts( "This is free software; see the source for copying conditions. There is NO" );
|
||||
puts( "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." );
|
||||
|
@@ -214,7 +214,7 @@ Synchronize_Lists(CLIENT * Client)
|
||||
static bool
|
||||
Send_CHANINFO(CLIENT * Client, CHANNEL * Chan)
|
||||
{
|
||||
char *modes, *topic;
|
||||
char *modes, *topic, *key;
|
||||
bool has_k, has_l;
|
||||
|
||||
#ifdef DEBUG
|
||||
@@ -243,9 +243,10 @@ Send_CHANINFO(CLIENT * Client, CHANNEL * Chan)
|
||||
Channel_Name(Chan), modes, topic);
|
||||
}
|
||||
/* "CHANINFO <chan> +<modes> <key> <limit> :<topic>" */
|
||||
key = Channel_Key(Chan);
|
||||
return IRC_WriteStrClient(Client, "CHANINFO %s +%s %s %lu :%s",
|
||||
Channel_Name(Chan), modes,
|
||||
has_k ? Channel_Key(Chan) : "*",
|
||||
has_k ? (key && *key ? key : "*") : "*",
|
||||
has_l ? Channel_MaxUsers(Chan) : 0, topic);
|
||||
} /* Send_CHANINFO */
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2018 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
|
||||
@@ -58,7 +58,7 @@ Op_NoPrivileges(CLIENT * Client, REQUEST * Req)
|
||||
* Check that the originator of a request is an IRC operator and allowed
|
||||
* to administer this server.
|
||||
*
|
||||
* @param CLient Client from which the command has been received.
|
||||
* @param Client Client from which the command has been received.
|
||||
* @param Req Request structure.
|
||||
* @return CLIENT structure of the client that initiated the command or
|
||||
* NULL if client is not allowed to execute operator commands.
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2018 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
|
||||
@@ -111,7 +111,7 @@ static COMMAND My_Commands[] =
|
||||
_CMD("USERS", IRC_USERS, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
|
||||
_CMD("VERSION", IRC_VERSION, CLIENT_USER|CLIENT_SERVER, 0, 1, 1),
|
||||
_CMD("WALLOPS", IRC_WALLOPS, CLIENT_USER|CLIENT_SERVER, 1, 1, 0),
|
||||
_CMD("WEBIRC", IRC_WEBIRC, CLIENT_UNKNOWN, 4, 4, 0),
|
||||
_CMD("WEBIRC", IRC_WEBIRC, CLIENT_UNKNOWN, 4, 5, 0),
|
||||
_CMD("WHO", IRC_WHO, CLIENT_USER, 0, 2, 1),
|
||||
_CMD("WHOIS", IRC_WHOIS, CLIENT_USER|CLIENT_SERVER, 0, -1, 1),
|
||||
_CMD("WHOWAS", IRC_WHOWAS, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
|
||||
@@ -169,8 +169,8 @@ Parse_GetCommandStruct( void )
|
||||
*
|
||||
* @param Idx Index of the connection from which the command has been received.
|
||||
* @param Request NULL terminated line of text (the "command").
|
||||
* @return true on success (valid command or "regular" error), false if a
|
||||
* fatal error occurred and the connection has been shut down.
|
||||
* @return CONNECTED on success (valid command or "regular" error), DISCONNECTED
|
||||
* if a fatal error occurred and the connection has been shut down.
|
||||
*/
|
||||
GLOBAL bool
|
||||
Parse_Request( CONN_ID Idx, char *Request )
|
||||
@@ -257,11 +257,14 @@ Parse_Request( CONN_ID Idx, char *Request )
|
||||
}
|
||||
}
|
||||
|
||||
if( ! Validate_Prefix( Idx, &req, &closed )) return ! closed;
|
||||
if( ! Validate_Command( Idx, &req, &closed )) return ! closed;
|
||||
if( ! Validate_Args( Idx, &req, &closed )) return ! closed;
|
||||
if(!Validate_Prefix(Idx, &req, &closed))
|
||||
return !closed;
|
||||
if(!Validate_Command(Idx, &req, &closed))
|
||||
return !closed;
|
||||
if(!Validate_Args(Idx, &req, &closed))
|
||||
return !closed;
|
||||
|
||||
return Handle_Request( Idx, &req );
|
||||
return Handle_Request(Idx, &req);
|
||||
} /* Parse_Request */
|
||||
|
||||
|
||||
@@ -490,7 +493,7 @@ static bool
|
||||
Handle_Request( CONN_ID Idx, REQUEST *Req )
|
||||
{
|
||||
CLIENT *client;
|
||||
bool result = true;
|
||||
bool result = CONNECTED;
|
||||
int client_type;
|
||||
COMMAND *cmd;
|
||||
|
||||
@@ -546,6 +549,8 @@ Handle_Request( CONN_ID Idx, REQUEST *Req )
|
||||
cmd->lcount++;
|
||||
else
|
||||
cmd->rcount++;
|
||||
|
||||
/* Return result of command (CONNECTED/DISCONNECTED). */
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -554,13 +559,13 @@ Handle_Request( CONN_ID Idx, REQUEST *Req )
|
||||
client_type != CLIENT_SERVICE )
|
||||
return true;
|
||||
|
||||
/* Unknown command and registered connection: generate error: */
|
||||
LogDebug("Connection %d: Unknown command \"%s\", %d %s,%s prefix.",
|
||||
Client_Conn( client ), Req->command, Req->argc,
|
||||
Req->argc == 1 ? "parameter" : "parameters",
|
||||
Req->prefix ? "" : " no" );
|
||||
|
||||
if (Client_Type(client) != CLIENT_SERVER)
|
||||
/* Unknown command and registered connection: generate error: */
|
||||
if (client_type != CLIENT_SERVER)
|
||||
result = IRC_WriteErrClient(client, ERR_UNKNOWNCOMMAND_MSG,
|
||||
Client_ID(client), Req->command);
|
||||
|
||||
|
@@ -108,9 +108,8 @@ Resolve_Name( PROC_STAT *s, const char *Host, void (*cbfunc)(int, short))
|
||||
return false;
|
||||
} /* Resolve_Name */
|
||||
|
||||
|
||||
#if !defined(HAVE_GETADDRINFO) || !defined(HAVE_GETNAMEINFO)
|
||||
#if !defined(WANT_IPV6) && defined(h_errno)
|
||||
#if !defined(HAVE_WORKING_GETADDRINFO) || !defined(HAVE_GETNAMEINFO)
|
||||
#ifdef h_errno
|
||||
static char *
|
||||
Get_Error( int H_Error )
|
||||
{
|
||||
@@ -233,7 +232,11 @@ ReverseLookup(const ng_ipaddr_t *IpAddr, char *resbuf, size_t reslen)
|
||||
* @return true if lookup successful, false if domain name not found
|
||||
*/
|
||||
static bool
|
||||
#ifdef HAVE_WORKING_GETADDRINFO
|
||||
ForwardLookup(const char *hostname, array *IpAddr, int af)
|
||||
#else
|
||||
ForwardLookup(const char *hostname, array *IpAddr, UNUSED int af)
|
||||
#endif
|
||||
{
|
||||
ng_ipaddr_t addr;
|
||||
|
||||
@@ -242,9 +245,6 @@ ForwardLookup(const char *hostname, array *IpAddr, int af)
|
||||
struct addrinfo *a, *ai_results;
|
||||
static struct addrinfo hints;
|
||||
|
||||
#ifdef AI_ADDRCONFIG /* glibc has this, but not e.g. netbsd 4.0 */
|
||||
hints.ai_flags = AI_ADDRCONFIG;
|
||||
#endif
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
hints.ai_protocol = IPPROTO_TCP;
|
||||
hints.ai_family = af;
|
||||
|
@@ -119,7 +119,7 @@ Rehash(void)
|
||||
if (strcmp(old_name, Conf_ServerName) != 0 ) {
|
||||
strlcpy(Conf_ServerName, old_name, sizeof Conf_ServerName);
|
||||
Log(LOG_ERR,
|
||||
"Can't change \"ServerName\" on runtime! Ignored new name.");
|
||||
"Can't change server name (\"Name\") on runtime! Ignored new name.");
|
||||
}
|
||||
if (old_nicklen != Conf_MaxNickLength) {
|
||||
Conf_MaxNickLength = old_nicklen;
|
||||
@@ -132,7 +132,7 @@ Rehash(void)
|
||||
|
||||
if (!ConnSSL_InitLibrary())
|
||||
Log(LOG_WARNING,
|
||||
"Re-Initializing of SSL failed, using old keys!");
|
||||
"Re-Initializing of SSL failed!");
|
||||
|
||||
/* Start listening on sockets */
|
||||
Conn_InitListeners( );
|
||||
@@ -154,6 +154,14 @@ Rehash(void)
|
||||
static void
|
||||
Signal_Handler(int Signal)
|
||||
{
|
||||
if (Signal != SIGCHLD) {
|
||||
#ifdef HAVE_STRSIGNAL
|
||||
Log(LOG_INFO, "Got signal \"%s\" ...", strsignal(Signal));
|
||||
#else
|
||||
Log(LOG_INFO, "Got signal %d ...", Signal);
|
||||
#endif
|
||||
}
|
||||
|
||||
switch (Signal) {
|
||||
case SIGTERM:
|
||||
case SIGINT:
|
||||
|
@@ -15,7 +15,13 @@ EXTRA_DIST = Makefile.ng
|
||||
|
||||
noinst_LIBRARIES = libngportab.a
|
||||
|
||||
libngportab_a_SOURCES = strdup.c strndup.c strlcpy.c strtok_r.c vsnprintf.c waitpid.c
|
||||
libngportab_a_SOURCES = \
|
||||
strdup.c \
|
||||
strlcpy.c \
|
||||
strndup.c \
|
||||
strtok_r.c \
|
||||
vsnprintf.c \
|
||||
waitpid.c
|
||||
|
||||
check_PROGRAMS = portabtest
|
||||
|
||||
|
@@ -102,7 +102,11 @@ typedef unsigned char bool;
|
||||
#endif
|
||||
|
||||
#undef GLOBAL
|
||||
#ifdef GLOBAL_INIT
|
||||
#define GLOBAL
|
||||
#else
|
||||
#define GLOBAL extern
|
||||
#endif
|
||||
|
||||
/* SPLint */
|
||||
|
||||
|
@@ -104,9 +104,10 @@ Check_strlcat(void)
|
||||
static void
|
||||
Check_strtok_r(void)
|
||||
{
|
||||
char *ptr, *last;
|
||||
char *str, *ptr, *last;
|
||||
|
||||
ptr = strdup("12,abc");
|
||||
str = ptr;
|
||||
|
||||
ptr = strtok_r(ptr, ",", &last);
|
||||
if (!ptr)
|
||||
@@ -123,6 +124,8 @@ Check_strtok_r(void)
|
||||
ptr = strtok_r(NULL, ",", &last);
|
||||
if (ptr)
|
||||
Panic("strtok_r result #3");
|
||||
|
||||
free(str);
|
||||
}
|
||||
|
||||
#ifdef PROTOTYPES
|
||||
|
@@ -23,13 +23,19 @@ EXTRA_DIST = \
|
||||
stress-A.e stress-B.e \
|
||||
server-login-test.e \
|
||||
start-server1 stop-server1 ngircd-test1.conf \
|
||||
start-server2 stop-server2 ngircd-test2.conf
|
||||
start-server2 stop-server2 ngircd-test2.conf \
|
||||
start-server3 stop-server3 ngircd-test3.conf \
|
||||
reload-server3 reload-server.sh prep-server3 cleanup-server3 switch-server3 \
|
||||
connect-ssl-cert1-test.e connect-ssl-cert2-test.e \
|
||||
ssl/cert-my-first-domain-tld.pem ssl/cert-my-second-domain-tld.pem \
|
||||
ssl/dhparams-my-first-domain-tld.pem ssl/dhparams-my-second-domain-tld.pem \
|
||||
ssl/key-my-first-domain-tld.pem ssl/key-my-second-domain-tld.pem
|
||||
|
||||
all:
|
||||
|
||||
clean-local:
|
||||
rm -rf logs tests *-test ngircd-test*.log procs.tmp tests-skipped.lst \
|
||||
T-ngircd1 ngircd-test1.motd T-ngircd2 ngircd-test2.motd
|
||||
T-ngircd1 ngircd-test1.motd T-ngircd2 ngircd-test2.motd T-ngircd3 ngircd-test3.motd
|
||||
|
||||
maintainer-clean-local:
|
||||
rm -f Makefile Makefile.in Makefile.am
|
||||
@@ -39,6 +45,7 @@ check_SCRIPTS = ngircd-TEST-Binary tests.sh
|
||||
ngircd-TEST-Binary:
|
||||
cp ../ngircd/ngircd T-ngircd1
|
||||
cp ../ngircd/ngircd T-ngircd2
|
||||
cp ../ngircd/ngircd T-ngircd3
|
||||
[ -f getpid.sh ] || ln -s $(srcdir)/getpid.sh .
|
||||
rm -f tests-skipped.lst
|
||||
|
||||
@@ -46,6 +53,14 @@ connect-test: tests.sh
|
||||
rm -f connect-test
|
||||
ln -s $(srcdir)/tests.sh connect-test
|
||||
|
||||
connect-ssl-cert1-test: tests.sh
|
||||
rm -f connect-ssl-cert1-test
|
||||
ln -s $(srcdir)/tests.sh connect-ssl-cert1-test
|
||||
|
||||
connect-ssl-cert2-test: tests.sh
|
||||
rm -f connect-ssl-cert2-test
|
||||
ln -s $(srcdir)/tests.sh connect-ssl-cert2-test
|
||||
|
||||
channel-test: tests.sh
|
||||
rm -f channel-test
|
||||
ln -s $(srcdir)/tests.sh channel-test
|
||||
@@ -113,4 +128,16 @@ TESTS = start-server1 \
|
||||
stress-server.sh \
|
||||
stop-server1
|
||||
|
||||
if HAVE_SSL
|
||||
TESTS += \
|
||||
prep-server3 \
|
||||
start-server3 \
|
||||
connect-ssl-cert1-test \
|
||||
switch-server3 \
|
||||
reload-server3 \
|
||||
connect-ssl-cert2-test \
|
||||
cleanup-server3 \
|
||||
stop-server3
|
||||
endif
|
||||
|
||||
# -eof-
|
||||
|
2
src/testsuite/cleanup-server3
Executable file
2
src/testsuite/cleanup-server3
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
rm ssl/cert.pem ssl/key.pem ssl/dhparams.pem
|
21
src/testsuite/connect-ssl-cert1-test.e
Normal file
21
src/testsuite/connect-ssl-cert1-test.e
Normal file
@@ -0,0 +1,21 @@
|
||||
# ngIRCd test suite
|
||||
# Server connect test
|
||||
|
||||
spawn openssl s_client -quiet -connect 127.0.0.1:6790
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"*CN = my.first.domain.tld"
|
||||
}
|
||||
|
||||
sleep 2
|
||||
send "oper\r"
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"451"
|
||||
}
|
||||
|
||||
send "quit\r"
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"Connection closed"
|
||||
}
|
22
src/testsuite/connect-ssl-cert2-test.e
Normal file
22
src/testsuite/connect-ssl-cert2-test.e
Normal file
@@ -0,0 +1,22 @@
|
||||
# ngIRCd test suite
|
||||
# Server connect test
|
||||
|
||||
spawn openssl s_client -quiet -connect 127.0.0.1:6790
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"*CN = my.second.domain.tld"
|
||||
}
|
||||
|
||||
sleep 2
|
||||
send "oper\r"
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"451"
|
||||
}
|
||||
|
||||
send "quit\r"
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"Connection closed"
|
||||
}
|
||||
|
@@ -14,6 +14,8 @@ elif [ $UNAME = "A/UX" ]; then
|
||||
PS_FLAGS="-af"; PS_PIDCOL="2"; HEAD_FLAGS="-1"
|
||||
elif [ $UNAME = "GNU" ]; then
|
||||
PS_FLAGS="-ax"; PS_PIDCOL="2"; HEAD_FLAGS="-n 1"
|
||||
elif [ $UNAME = "Haiku" ]; then
|
||||
PS_FLAGS="-o Id -o Team"; PS_PIDCOL="1"; HEAD_FLAGS="-1"
|
||||
elif [ $UNAME = "Linux" ]; then
|
||||
PS_FLAGS="ax"; PS_PIDCOL="1"; HEAD_FLAGS="-n 1"
|
||||
elif [ $UNAME = "SunOS" ]; then
|
||||
|
@@ -61,6 +61,49 @@ expect {
|
||||
timeout { exit 1 }
|
||||
"405"
|
||||
}
|
||||
send "JOIN 0\r"
|
||||
|
||||
send "JoIn #MultiMode\r"
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"474 nick #MultiMode"
|
||||
}
|
||||
|
||||
send "OPer TestOp 123\r"
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"381"
|
||||
}
|
||||
|
||||
send "Mode #MultiMode -b nick!~user\r"
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"MODE #MultiMode -b nick!~user@*"
|
||||
}
|
||||
|
||||
send "jOiN #MULTIMODE\r"
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"@* JOIN :#MULTIMODE"
|
||||
}
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"366"
|
||||
}
|
||||
send "ModE #MULTImode\r"
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"324 nick #MultiMode +Pnt"
|
||||
}
|
||||
send "mODe #multimode +b\r"
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"367 nick #MultiMode banned!~ghost@example.com ngircd.test.server"
|
||||
}
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
"368 nick #MultiMode"
|
||||
}
|
||||
|
||||
send "quit\r"
|
||||
expect {
|
||||
|
@@ -12,6 +12,7 @@
|
||||
[Limits]
|
||||
MaxConnectionsIP = 0
|
||||
MaxJoins = 4
|
||||
MaxPenaltyTime = 1
|
||||
|
||||
[Options]
|
||||
OperCanUseMode = yes
|
||||
@@ -62,4 +63,10 @@
|
||||
Name = +ModelessChannel
|
||||
Topic = A modeless Channel
|
||||
|
||||
[Channel]
|
||||
Name = MultiMode
|
||||
Modes = +n +b nick!~user
|
||||
Modes = +t
|
||||
Modes = +b banned!~ghost@example.com
|
||||
|
||||
# -eof-
|
||||
|
@@ -12,6 +12,7 @@
|
||||
[Limits]
|
||||
MaxConnectionsIP = 0
|
||||
MaxJoins = 4
|
||||
MaxPenaltyTime = 1
|
||||
|
||||
[Options]
|
||||
OperCanUseMode = yes
|
||||
|
31
src/testsuite/ngircd-test3.conf
Normal file
31
src/testsuite/ngircd-test3.conf
Normal file
@@ -0,0 +1,31 @@
|
||||
# ngIRCd test suite
|
||||
# configuration file for test server #1
|
||||
|
||||
[Global]
|
||||
Name = ngircd.test.server
|
||||
Info = ngIRCd Test-Server 3
|
||||
Listen = 127.0.0.1
|
||||
Ports = 6789
|
||||
MotdFile = ngircd-test3.motd
|
||||
AdminEMail = admin@irc.server
|
||||
|
||||
[SSL]
|
||||
CertFile = ssl/cert.pem
|
||||
KeyFile = ssl/key.pem
|
||||
DHFile = ssl/dhparams.pem
|
||||
Ports = 6790
|
||||
|
||||
|
||||
[Limits]
|
||||
MaxConnectionsIP = 0
|
||||
MaxJoins = 4
|
||||
MaxPenaltyTime = 1
|
||||
|
||||
[Options]
|
||||
OperCanUseMode = yes
|
||||
Ident = no
|
||||
IncludeDir = /var/empty
|
||||
DNS = no
|
||||
PAM = no
|
||||
|
||||
# -eof-
|
4
src/testsuite/prep-server3
Executable file
4
src/testsuite/prep-server3
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
cp ssl/cert-my-first-domain-tld.pem ssl/cert.pem
|
||||
cp ssl/key-my-first-domain-tld.pem ssl/key.pem
|
||||
cp ssl/dhparams-my-first-domain-tld.pem ssl/dhparams.pem
|
32
src/testsuite/reload-server.sh
Executable file
32
src/testsuite/reload-server.sh
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
# ngIRCd Test Suite
|
||||
|
||||
[ -z "$srcdir" ] && srcdir=`dirname $0`
|
||||
|
||||
# read in functions
|
||||
. ${srcdir}/functions.inc
|
||||
|
||||
if [ -n "$1" ]; then
|
||||
id="$1"; shift
|
||||
else
|
||||
id="1"
|
||||
fi
|
||||
|
||||
echo_n "reloading server ${id} ..."
|
||||
|
||||
# reload (sighup) test-server ...
|
||||
pid=`./getpid.sh T-ngircd${id}`
|
||||
if [ -z "$pid" ]; then
|
||||
echo " failure: no running server found!?"
|
||||
exit 1
|
||||
fi
|
||||
kill -HUP $pid > /dev/null 2>&1; r=$?
|
||||
if [ $r -eq 0 ]; then
|
||||
sleep 2
|
||||
echo " ok".
|
||||
kill -0 $pid && exit 0
|
||||
fi
|
||||
echo " failure: server ${id} could not be reloaded!"
|
||||
exit 1
|
||||
|
||||
# -eof-
|
7
src/testsuite/reload-server3
Executable file
7
src/testsuite/reload-server3
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
# ngIRCd Test Suite
|
||||
|
||||
[ -z "$srcdir" ] && srcdir=`dirname $0`
|
||||
${srcdir}/reload-server.sh 3
|
||||
|
||||
# -eof-
|
@@ -45,7 +45,7 @@ expect {
|
||||
}
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
":ngircd.test.server CHANINFO #FullKeyed +Plk Secret 0 :"
|
||||
":ngircd.test.server CHANINFO #FullKeyed +Pkl Secret 0 :"
|
||||
}
|
||||
expect {
|
||||
timeout { exit 1 }
|
||||
|
24
src/testsuite/ssl/cert-my-first-domain-tld.pem
Normal file
24
src/testsuite/ssl/cert-my-first-domain-tld.pem
Normal file
@@ -0,0 +1,24 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEDDCCAnSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDExNteS5m
|
||||
aXJzdC5kb21haW4udGxkMB4XDTIwMDQyNDA4MjQyNVoXDTQ3MDkxMDA4MjQyNVow
|
||||
HjEcMBoGA1UEAxMTbXkuZmlyc3QuZG9tYWluLnRsZDCCAaIwDQYJKoZIhvcNAQEB
|
||||
BQADggGPADCCAYoCggGBAJ3HvAIDQxL/o7yoemMH5OZEXyFTQ/Q838UY0lXbWBb0
|
||||
Lsz9ft0UFtu/SSabHLLJHQME99IyleYiMwi0Y3oqDCVZp6eqeKS7MTRIot2D1m4T
|
||||
QsK13dAvZOaEYPsltdsFDCP75s07tDp9aYYsHDsNhHu8LxUachmb3747/v1E1TGZ
|
||||
T5BSnzGxEsQo1vzKKMpMbjct1d3zdQRB1o/r6BlaPykTAaB1DkM7GOOdtprhO/Sh
|
||||
PbfXL+BHgldPbxboul7NTt1r2CfqFmz4Pi4PbCruv0HVG8N8egN6Jb80UuwOiCcM
|
||||
BxY9uhCh6ZPoZ9ufmGALhkgD0rlt/sQfKQ0EImzx8cC/6zvSfJQ0WazLp/wCImkP
|
||||
QZwKm/U6RMHWtthHg4pJRsYF5rL2+YMqebTcG655+fgQm9EI+ZcAqWIbnogGA046
|
||||
oS1X7805ogBo7OPMlJ19NjxOc3yS9dXlk6hEe0AKSCCusy4lI4gcGd2gwmAtXp3i
|
||||
ZVkFBsUsmBe3x5sEAEVVyQIDAQABo1UwUzAMBgNVHRMBAf8EAjAAMBMGA1UdJQQM
|
||||
MAoGCCsGAQUFBwMBMA8GA1UdDwEB/wQFAwMHoAAwHQYDVR0OBBYEFFst+QAEUdCP
|
||||
V80/hmOEBKtjOMRLMA0GCSqGSIb3DQEBCwUAA4IBgQCOEIJgi0H1lc33dU8Na4//
|
||||
CI3rOOYwFnSiiUe8A5n38LsU2ZrwwJmn60JgNdAmrNkXTI8qNTuTU6XIOAqq32FY
|
||||
wdNqPt7wE7UDRMQeMDlLNo+lnuI1XrBxk9mEpfmyGeGqeIDIr5vlEWs4Snr73RC0
|
||||
iQBUD6qGdhZa/ABm342psSA4OxtjCn6mBBT/gSi8yCO0Po8yFvndGMe3kNQFwir4
|
||||
supxptzqFDCDOQOYSgUy2QT7wlFAqPdZWMSepdeoaBYrqBsvf9shWC0iChKJxnCp
|
||||
SVZpoPysxuVyQMKjjzTJcNDwydMyIny4Z9rt+kkvgn/JDxIQe1+jJ8dJR+VWQeNe
|
||||
we604uEsN0hWq1FkkMO8NQdbM4xipDciEanHunWvwFkXuIuc0aEpqIchU32O2wav
|
||||
ck8ytssLLQDGaJLHx6iOB2MCi8HbS8U9xfrg8JJIFnxmnkKdI6x2akzYm+nqDxqQ
|
||||
dGeoVJgegiamYlydkGskw04oGkD16H0LQwlzsDwgvP8=
|
||||
-----END CERTIFICATE-----
|
24
src/testsuite/ssl/cert-my-second-domain-tld.pem
Normal file
24
src/testsuite/ssl/cert-my-second-domain-tld.pem
Normal file
@@ -0,0 +1,24 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEDjCCAnagAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDExRteS5z
|
||||
ZWNvbmQuZG9tYWluLnRsZDAeFw0yMDA0MjQwODIzNDBaFw00NzA5MTAwODIzNDBa
|
||||
MB8xHTAbBgNVBAMTFG15LnNlY29uZC5kb21haW4udGxkMIIBojANBgkqhkiG9w0B
|
||||
AQEFAAOCAY8AMIIBigKCAYEA4+442scsdqSf6O4UO/RskMzOX8BhDcSwrhGe97jd
|
||||
CuQKUqS6OT1UoHK0DdMkxHlOMhifPzKxoBQlI/02l14tV//xNArKj4a+BZzNS1mp
|
||||
3adjgTc3uRDQHmHVZUzH4VXhL2zZ1EXVaJULZVWJYAqMW8GOObs+Kwijo+zxBGRs
|
||||
96Re9sg3XMkCUN+ZMoCpqoU4R/QiJ5z7B4AXS9CVcvczQKiULn1otP+UQQ4ABHlN
|
||||
t8pZzR6P/WGy91PvGt5wWfpReGveP/Zl2tksVXXs0CQgteneblYVzj01MaobVW59
|
||||
/LGUpe0oQy2rtzQVX3DZkDoGwGh4lof2Af+xMjCbVL6oDbPPooXG8TJnDP3AVhMG
|
||||
KIb+EhBUIEJnd/z6ZXTWbv0KQOt4wiVBzuXVBf7xxn/aH4+3kyrnj7CsUHXM4++x
|
||||
KRZq7gaP7nRbN22rw+WCHnqvMfAGnS7/6AjKFUWxmNWxRXMX+ehsSbT/XQnQm88e
|
||||
oUBLzQc4JrNSPklVJ82Qp19tAgMBAAGjVTBTMAwGA1UdEwEB/wQCMAAwEwYDVR0l
|
||||
BAwwCgYIKwYBBQUHAwEwDwYDVR0PAQH/BAUDAwegADAdBgNVHQ4EFgQUdnjZogYk
|
||||
7JK21Fj2NfYwrtJzK1EwDQYJKoZIhvcNAQELBQADggGBABDreWdgeyLMvqv1fO1f
|
||||
zbkSxUp57XoQsX3G/1nUfjT2Zujxwvu8D9N74R3I/BsxVTiI4RL2LZj33q+eq0KX
|
||||
LG/zBH2DEBheMmQtbMS6Ah+MTSlvG8SDlRRYPEVdYYtXOwskGNyIwcqNTr0j2Mrn
|
||||
Zlre0VJQc5r94seoVCjCseio26I9qf0LW2QsGfk4vSMJlhTRkcbBjKABG8xGXv61
|
||||
+Hd4OFA0e/gOzFZFwDxWEsks5d8w6kzyipdGcCezBhlDi/qNCAex1GVTdUsCbGNS
|
||||
9N2i1Cty01AJbrkfWwKCc/Xg/YV/9PVncoiwJSIILllmFvLPu0vRof8AX/4DxEkS
|
||||
YFnN2x+qyukW+DfSnC3YSqyKdKtvB0U0Xf4tcHQfX2kHS/PqOIR6F9trY45ZlXoA
|
||||
nQKf1vcsIJzHW1mi9SvyVgyp3HftPw5xIU15mHRHBfBEzkVNwZJxyCl6nd++4vMS
|
||||
DmzpJPCT/a8rl1Jj5yyQ5zJp06Z7FbPpkT9kiAB5+U/vKw==
|
||||
-----END CERTIFICATE-----
|
77
src/testsuite/ssl/dhparams-my-first-domain-tld.pem
Normal file
77
src/testsuite/ssl/dhparams-my-first-domain-tld.pem
Normal file
@@ -0,0 +1,77 @@
|
||||
|
||||
Recommended key length: 256 bits
|
||||
|
||||
generator:
|
||||
39:76:54:fb:49:4c:58:2c:f6:62:3a:81:d1:1e:ef:55
|
||||
97:da:5a:9c:f8:11:e4:23:26:91:e2:d4:14:94:14:e1
|
||||
d2:82:69:b6:f0:2e:af:08:cc:bc:21:0d:e5:a7:40:f9
|
||||
8d:18:a2:52:6a:41:de:57:c7:17:0d:23:b9:36:3c:33
|
||||
ef:ff:0b:85:b1:a9:59:65:49:46:36:3b:57:e4:b7:91
|
||||
4b:6c:56:1a:47:44:d8:5b:8a:bd:93:93:41:81:01:9d
|
||||
31:8d:3d:b8:a6:6c:7e:48:aa:86:b6:68:eb:66:0b:f3
|
||||
42:58:c5:ef:65:75:9d:8d:0f:18:21:25:86:40:a6:fd
|
||||
23:15:58:82:57:df:b6:0d:e5:c9:f1:85:ef:ec:ae:4a
|
||||
b4:1b:70:ac:f5:c8:75:57:d6:4b:17:ca:f1:a1:45:13
|
||||
c0:e7:2b:b9:26:92:c0:a1:c4:ba:87:4e:b7:37:2f:6c
|
||||
02:51:86:95:2d:f3:c1:7e:c1:f7:00:52:00:0d:43:f2
|
||||
aa:8d:af:f6:5a:4f:a8:65:a5:26:af:58:fa:5d:fb:77
|
||||
42:e2:1e:19:f5:0f:8a:f2:9b:6b:9a:c0:2c:60:4f:45
|
||||
da:9c:54:97:67:6a:e3:62:b9:c1:a0:3d:bf:cb:aa:22
|
||||
23:3b:08:bc:29:6a:a5:91:5e:76:1b:60:1d:c2:02:85
|
||||
2e:c6:85:20:5a:6e:0b:84:e3:e3:88:4e:c5:48:f3:c8
|
||||
c1:71:b0:22:22:70:00:27:99:c6:dc:50:62:2d:be:55
|
||||
65:af:60:d7:43:44:2f:97:72:a2:66:48:fa:ee:af:7a
|
||||
81:cc:77:97:95:61:74:37:44:f2:b9:8e:9a:90:e4:45
|
||||
89:69:66:fe:52:fe:82:d2:de:4c:11:64:a2:c3:6e:00
|
||||
e4:a7:58:4f:e9:61:0d:d2:72:a1:fb:72:89:84:73:64
|
||||
de:1a:2c:0f:7e:46:5f:73:f6:67:3f:14:86:1c:90:bf
|
||||
49:d6:d1:3c:6a:6a:8b:42:29:22:02:47:c4:b9:bb:64
|
||||
|
||||
|
||||
prime:
|
||||
90:cb:d2:ec:9f:0c:6c:69:f5:c0:46:e1:9c:fc:4d:3b
|
||||
ff:65:40:32:66:d5:fa:e0:ee:88:7d:35:ad:5e:1a:37
|
||||
07:db:c0:ed:a4:b2:94:ed:41:b4:be:be:35:e3:36:ff
|
||||
04:c2:48:4d:f0:e9:d2:54:54:de:10:4b:1c:6b:0e:e6
|
||||
8f:c1:8a:9f:9d:e2:f0:9e:35:52:b7:2a:29:5e:e1:95
|
||||
c0:e0:6e:2b:a9:eb:00:fb:fe:90:d9:aa:02:2d:52:e5
|
||||
09:fe:5a:e9:5e:73:e1:94:d1:a5:a1:f5:3b:97:e8:53
|
||||
67:ea:86:a7:f2:70:5c:31:7f:ed:23:f1:ce:01:62:e5
|
||||
0c:7b:7c:18:67:ec:42:35:e8:d1:3d:e1:74:f9:77:02
|
||||
fb:8d:24:a7:bf:3a:38:36:cf:82:9e:90:b2:7c:c3:f3
|
||||
d3:e4:f1:55:ca:4b:1e:5e:50:b9:3b:d8:6a:6c:c2:51
|
||||
a9:a7:e2:86:02:ef:7b:c2:d1:80:e2:dd:e0:7c:e2:03
|
||||
e5:b1:e9:5b:45:c7:56:bb:37:56:9a:4a:0e:7e:b6:f6
|
||||
a5:95:ef:93:5f:f9:38:16:e3:73:b5:68:a7:98:15:a2
|
||||
6c:ff:6b:2e:89:f7:9f:f8:a9:d7:ce:a4:9a:de:cb:42
|
||||
90:40:7b:fe:6c:3a:e0:4c:42:fe:0c:af:4e:7f:37:be
|
||||
fd:3b:31:17:f6:30:0d:52:a5:ca:19:c3:c6:a4:dc:48
|
||||
ec:59:02:6e:5a:80:b8:09:7d:3d:9a:00:32:7a:d7:fe
|
||||
84:38:12:22:7f:c6:97:88:91:05:7f:ba:74:2b:8c:36
|
||||
a0:e4:d7:1c:22:2f:0b:6a:cb:a8:71:40:d2:b1:ed:9f
|
||||
43:79:2f:a6:34:7d:c0:65:c4:04:fa:d4:5c:14:7c:4b
|
||||
6f:cb:b2:f8:f0:91:05:33:b7:23:58:e8:4d:ff:3f:ef
|
||||
a4:f3:17:78:9b:5b:f6:f1:49:82:12:de:5d:f7:1d:47
|
||||
1e:08:7f:ee:2d:10:68:f8:a5:97:03:9d:32:d2:9c:b7
|
||||
|
||||
|
||||
|
||||
-----BEGIN DH PARAMETERS-----
|
||||
MIIDDQKCAYEAkMvS7J8MbGn1wEbhnPxNO/9lQDJm1frg7oh9Na1eGjcH28DtpLKU
|
||||
7UG0vr414zb/BMJITfDp0lRU3hBLHGsO5o/Bip+d4vCeNVK3Kile4ZXA4G4rqesA
|
||||
+/6Q2aoCLVLlCf5a6V5z4ZTRpaH1O5foU2fqhqfycFwxf+0j8c4BYuUMe3wYZ+xC
|
||||
NejRPeF0+XcC+40kp786ODbPgp6QsnzD89Pk8VXKSx5eULk72GpswlGpp+KGAu97
|
||||
wtGA4t3gfOID5bHpW0XHVrs3VppKDn629qWV75Nf+TgW43O1aKeYFaJs/2suifef
|
||||
+KnXzqSa3stCkEB7/mw64ExC/gyvTn83vv07MRf2MA1SpcoZw8ak3EjsWQJuWoC4
|
||||
CX09mgAyetf+hDgSIn/Gl4iRBX+6dCuMNqDk1xwiLwtqy6hxQNKx7Z9DeS+mNH3A
|
||||
ZcQE+tRcFHxLb8uy+PCRBTO3I1joTf8/76TzF3ibW/bxSYIS3l33HUceCH/uLRBo
|
||||
+KWXA50y0py3AoIBgDl2VPtJTFgs9mI6gdEe71WX2lqc+BHkIyaR4tQUlBTh0oJp
|
||||
tvAurwjMvCEN5adA+Y0YolJqQd5XxxcNI7k2PDPv/wuFsalZZUlGNjtX5LeRS2xW
|
||||
GkdE2FuKvZOTQYEBnTGNPbimbH5Iqoa2aOtmC/NCWMXvZXWdjQ8YISWGQKb9IxVY
|
||||
glfftg3lyfGF7+yuSrQbcKz1yHVX1ksXyvGhRRPA5yu5JpLAocS6h063Ny9sAlGG
|
||||
lS3zwX7B9wBSAA1D8qqNr/ZaT6hlpSavWPpd+3dC4h4Z9Q+K8ptrmsAsYE9F2pxU
|
||||
l2dq42K5waA9v8uqIiM7CLwpaqWRXnYbYB3CAoUuxoUgWm4LhOPjiE7FSPPIwXGw
|
||||
IiJwACeZxtxQYi2+VWWvYNdDRC+XcqJmSPrur3qBzHeXlWF0N0TyuY6akORFiWlm
|
||||
/lL+gtLeTBFkosNuAOSnWE/pYQ3ScqH7comEc2TeGiwPfkZfc/ZnPxSGHJC/SdbR
|
||||
PGpqi0IpIgJHxLm7ZAICAQA=
|
||||
-----END DH PARAMETERS-----
|
77
src/testsuite/ssl/dhparams-my-second-domain-tld.pem
Normal file
77
src/testsuite/ssl/dhparams-my-second-domain-tld.pem
Normal file
@@ -0,0 +1,77 @@
|
||||
|
||||
Recommended key length: 256 bits
|
||||
|
||||
generator:
|
||||
da:16:f5:61:0c:09:de:cd:9b:be:b8:2b:c9:96:97:1b
|
||||
fc:29:b2:a5:1b:ee:d3:36:bd:6c:73:7e:1c:2a:35:71
|
||||
26:c6:54:b6:28:24:db:87:9d:fc:9e:26:28:e9:01:b8
|
||||
85:f2:02:9b:6a:c3:f5:3a:85:ae:1d:8c:e9:e8:c4:41
|
||||
3a:78:2f:9e:f0:2a:77:18:99:a6:91:2b:2b:8c:10:98
|
||||
89:04:d9:03:5f:4f:77:d6:27:1d:5e:ee:a2:d0:b1:c8
|
||||
a7:64:b4:7a:67:5f:aa:3f:02:b0:d2:f7:cd:4c:7a:9d
|
||||
63:57:99:8c:89:17:3f:2d:2d:1d:f5:58:61:49:62:54
|
||||
55:17:be:ea:43:03:44:d7:02:39:67:26:b3:7a:4f:00
|
||||
a3:a1:3b:d9:f3:aa:7a:c5:00:46:86:92:e2:2e:d8:09
|
||||
ee:ca:97:06:c5:33:e5:99:f3:4c:46:81:50:59:6b:60
|
||||
fb:a3:24:2a:f8:8f:e0:fb:a5:c3:9a:7d:f7:f2:d7:30
|
||||
e5:1b:fa:15:a0:ca:6d:f5:64:4f:20:a3:fb:f4:31:55
|
||||
b5:58:c4:6f:06:7d:5d:36:16:03:31:73:57:6b:39:c6
|
||||
10:21:d9:f0:eb:74:43:2e:b0:da:ee:96:86:6e:0c:b5
|
||||
08:78:af:3d:9b:66:71:bc:05:63:9d:aa:a6:2e:bc:c9
|
||||
c0:e4:a4:c6:60:e8:5d:d2:96:55:a3:72:4e:7a:ec:b2
|
||||
a8:23:b9:3f:7c:33:5d:f0:5f:29:57:cd:8e:9a:fd:7b
|
||||
b6:83:7f:56:ba:64:bd:a8:1c:83:7f:ee:04:f1:bb:1f
|
||||
70:6d:08:46:a2:95:e6:6e:2a:54:44:d9:af:9d:22:a4
|
||||
50:6d:88:65:de:05:89:99:75:7e:0c:12:d9:25:43:f7
|
||||
da:b6:41:f8:60:68:f7:6a:f6:a4:8d:8b:93:82:87:56
|
||||
c1:80:4d:e6:66:37:1e:22:5c:86:90:d1:8e:02:3a:18
|
||||
34:84:6a:da:e5:4f:a5:4f:29:78:46:97:71:24:80:92
|
||||
|
||||
|
||||
prime:
|
||||
f8:98:84:b9:b2:75:39:d5:da:14:fa:4a:03:96:57:78
|
||||
95:4e:8c:ba:c3:89:de:36:2c:4a:2b:0a:31:08:09:89
|
||||
bb:f6:00:a1:0b:64:02:52:1e:3f:23:67:df:2c:97:7a
|
||||
7a:81:e0:b0:ae:00:bf:a6:8f:02:e1:62:d4:dc:9e:62
|
||||
9a:27:f2:cf:4f:88:73:96:de:8a:61:1c:ac:3f:bb:f3
|
||||
0d:be:5e:07:3b:6f:da:0c:10:03:b5:b2:5a:60:3e:c8
|
||||
6f:aa:2c:3e:92:b9:ec:ee:08:29:90:c3:5e:8e:c1:a4
|
||||
a7:1a:ab:87:f8:70:13:e8:b1:2f:b5:79:c1:bb:8f:21
|
||||
76:b4:1f:ba:91:62:f9:d3:3a:d7:c8:23:00:3e:fe:a5
|
||||
49:51:f8:eb:9f:46:e3:7d:1a:d3:54:a1:3a:d1:4b:05
|
||||
ec:77:6e:80:dc:1b:22:e1:36:2a:a1:75:20:8c:48:bd
|
||||
53:a6:24:c0:b2:47:36:51:0d:69:b3:cc:e6:fe:8c:34
|
||||
0e:1f:16:03:af:81:b7:62:11:a8:82:06:c2:70:00:23
|
||||
fe:0e:e0:fa:a1:e7:3d:cc:81:ae:76:f4:3e:66:84:df
|
||||
3f:63:ba:4e:aa:21:1d:5c:a2:a2:55:0e:53:31:40:7d
|
||||
7a:99:20:77:23:82:0c:a7:b3:1b:dd:13:fc:23:5f:6d
|
||||
58:6c:a7:1f:f6:1a:7c:2a:57:31:c1:10:7b:f1:54:a9
|
||||
8c:49:7f:17:14:5f:a4:69:16:11:6c:7d:1d:eb:d4:88
|
||||
ab:6b:f8:8d:8b:be:0d:45:c7:7b:04:4f:a3:5f:f4:4f
|
||||
83:12:0c:00:73:5d:57:02:0c:95:b6:ce:70:60:52:80
|
||||
05:79:55:ed:99:e3:0c:23:dc:23:cd:9b:d3:a5:8e:4d
|
||||
94:c8:61:2d:56:b1:15:19:ca:b2:2c:76:7c:89:04:44
|
||||
18:5c:72:1e:03:9b:e0:dd:69:44:9f:68:0d:c4:2a:34
|
||||
5e:bd:4f:6c:14:41:93:08:0d:4b:4d:de:97:41:9b:8d
|
||||
|
||||
|
||||
|
||||
-----BEGIN DH PARAMETERS-----
|
||||
MIIDDgKCAYEA+JiEubJ1OdXaFPpKA5ZXeJVOjLrDid42LEorCjEICYm79gChC2QC
|
||||
Uh4/I2ffLJd6eoHgsK4Av6aPAuFi1NyeYpon8s9PiHOW3ophHKw/u/MNvl4HO2/a
|
||||
DBADtbJaYD7Ib6osPpK57O4IKZDDXo7BpKcaq4f4cBPosS+1ecG7jyF2tB+6kWL5
|
||||
0zrXyCMAPv6lSVH4659G430a01ShOtFLBex3boDcGyLhNiqhdSCMSL1TpiTAskc2
|
||||
UQ1ps8zm/ow0Dh8WA6+Bt2IRqIIGwnAAI/4O4Pqh5z3Mga529D5mhN8/Y7pOqiEd
|
||||
XKKiVQ5TMUB9epkgdyOCDKezG90T/CNfbVhspx/2GnwqVzHBEHvxVKmMSX8XFF+k
|
||||
aRYRbH0d69SIq2v4jYu+DUXHewRPo1/0T4MSDABzXVcCDJW2znBgUoAFeVXtmeMM
|
||||
I9wjzZvTpY5NlMhhLVaxFRnKsix2fIkERBhcch4Dm+DdaUSfaA3EKjRevU9sFEGT
|
||||
CA1LTd6XQZuNAoIBgQDaFvVhDAnezZu+uCvJlpcb/CmypRvu0za9bHN+HCo1cSbG
|
||||
VLYoJNuHnfyeJijpAbiF8gKbasP1OoWuHYzp6MRBOngvnvAqdxiZppErK4wQmIkE
|
||||
2QNfT3fWJx1e7qLQscinZLR6Z1+qPwKw0vfNTHqdY1eZjIkXPy0tHfVYYUliVFUX
|
||||
vupDA0TXAjlnJrN6TwCjoTvZ86p6xQBGhpLiLtgJ7sqXBsUz5ZnzTEaBUFlrYPuj
|
||||
JCr4j+D7pcOafffy1zDlG/oVoMpt9WRPIKP79DFVtVjEbwZ9XTYWAzFzV2s5xhAh
|
||||
2fDrdEMusNruloZuDLUIeK89m2ZxvAVjnaqmLrzJwOSkxmDoXdKWVaNyTnrssqgj
|
||||
uT98M13wXylXzY6a/Xu2g39WumS9qByDf+4E8bsfcG0IRqKV5m4qVETZr50ipFBt
|
||||
iGXeBYmZdX4MEtklQ/fatkH4YGj3avakjYuTgodWwYBN5mY3HiJchpDRjgI6GDSE
|
||||
atrlT6VPKXhGl3EkgJICAgEA
|
||||
-----END DH PARAMETERS-----
|
182
src/testsuite/ssl/key-my-first-domain-tld.pem
Normal file
182
src/testsuite/ssl/key-my-first-domain-tld.pem
Normal file
@@ -0,0 +1,182 @@
|
||||
Public Key Info:
|
||||
Public Key Algorithm: RSA
|
||||
Key Security Level: High (3072 bits)
|
||||
|
||||
modulus:
|
||||
00:9d:c7:bc:02:03:43:12:ff:a3:bc:a8:7a:63:07:e4
|
||||
e6:44:5f:21:53:43:f4:3c:df:c5:18:d2:55:db:58:16
|
||||
f4:2e:cc:fd:7e:dd:14:16:db:bf:49:26:9b:1c:b2:c9
|
||||
1d:03:04:f7:d2:32:95:e6:22:33:08:b4:63:7a:2a:0c
|
||||
25:59:a7:a7:aa:78:a4:bb:31:34:48:a2:dd:83:d6:6e
|
||||
13:42:c2:b5:dd:d0:2f:64:e6:84:60:fb:25:b5:db:05
|
||||
0c:23:fb:e6:cd:3b:b4:3a:7d:69:86:2c:1c:3b:0d:84
|
||||
7b:bc:2f:15:1a:72:19:9b:df:be:3b:fe:fd:44:d5:31
|
||||
99:4f:90:52:9f:31:b1:12:c4:28:d6:fc:ca:28:ca:4c
|
||||
6e:37:2d:d5:dd:f3:75:04:41:d6:8f:eb:e8:19:5a:3f
|
||||
29:13:01:a0:75:0e:43:3b:18:e3:9d:b6:9a:e1:3b:f4
|
||||
a1:3d:b7:d7:2f:e0:47:82:57:4f:6f:16:e8:ba:5e:cd
|
||||
4e:dd:6b:d8:27:ea:16:6c:f8:3e:2e:0f:6c:2a:ee:bf
|
||||
41:d5:1b:c3:7c:7a:03:7a:25:bf:34:52:ec:0e:88:27
|
||||
0c:07:16:3d:ba:10:a1:e9:93:e8:67:db:9f:98:60:0b
|
||||
86:48:03:d2:b9:6d:fe:c4:1f:29:0d:04:22:6c:f1:f1
|
||||
c0:bf:eb:3b:d2:7c:94:34:59:ac:cb:a7:fc:02:22:69
|
||||
0f:41:9c:0a:9b:f5:3a:44:c1:d6:b6:d8:47:83:8a:49
|
||||
46:c6:05:e6:b2:f6:f9:83:2a:79:b4:dc:1b:ae:79:f9
|
||||
f8:10:9b:d1:08:f9:97:00:a9:62:1b:9e:88:06:03:4e
|
||||
3a:a1:2d:57:ef:cd:39:a2:00:68:ec:e3:cc:94:9d:7d
|
||||
36:3c:4e:73:7c:92:f5:d5:e5:93:a8:44:7b:40:0a:48
|
||||
20:ae:b3:2e:25:23:88:1c:19:dd:a0:c2:60:2d:5e:9d
|
||||
e2:65:59:05:06:c5:2c:98:17:b7:c7:9b:04:00:45:55
|
||||
c9:
|
||||
|
||||
public exponent:
|
||||
01:00:01:
|
||||
|
||||
private exponent:
|
||||
45:26:8b:e4:c9:ef:34:bd:6b:d2:bc:78:5f:3c:cf:7a
|
||||
88:4e:b5:39:5c:18:08:31:fe:9d:21:5a:55:b6:e6:e0
|
||||
80:3e:81:7f:7f:7f:55:81:5b:f5:c0:80:cc:f4:22:a6
|
||||
9f:73:26:f6:2e:0b:7a:80:54:a3:a5:03:d0:3f:eb:70
|
||||
d7:39:5e:87:9d:36:7d:80:54:2c:dd:8c:7e:42:95:9d
|
||||
c5:6d:b6:ed:8f:57:a6:3e:4d:98:7f:9a:08:79:04:5e
|
||||
4c:cb:13:5d:b1:a4:0c:da:78:4c:40:ba:e2:ba:ca:ec
|
||||
bc:0e:5a:8e:6b:a1:83:aa:6d:22:b8:5f:e2:32:19:f9
|
||||
da:60:23:85:f7:ee:66:8e:28:64:09:08:c5:15:dc:a7
|
||||
95:71:76:41:3f:79:72:b3:34:49:81:98:08:bc:7f:e0
|
||||
0d:9f:71:e6:bb:a8:85:97:23:f3:34:5b:ef:09:2a:ef
|
||||
1c:30:9d:94:33:14:c4:30:65:f5:07:32:5a:b4:40:00
|
||||
77:4e:93:b3:f4:6a:9d:9f:dc:6b:8f:0b:43:81:43:ff
|
||||
d5:43:a9:93:68:f5:ab:2b:b9:8e:36:7b:13:0e:11:51
|
||||
5f:aa:46:24:a7:3b:19:4d:31:e9:2a:a2:7b:d4:a8:68
|
||||
38:9e:70:dd:68:9a:a0:f8:f3:27:40:b2:24:1b:80:93
|
||||
7e:ae:d1:25:6e:90:7d:7f:52:84:a8:46:1b:54:c9:c7
|
||||
9a:e5:a0:06:94:bd:d4:94:33:c7:25:f4:6c:13:e3:38
|
||||
e0:83:97:51:aa:52:25:06:d9:64:b2:dc:79:53:e5:37
|
||||
0e:e4:33:e6:f4:bb:10:1a:66:11:9f:86:69:b0:2f:9c
|
||||
b4:f8:89:e6:a4:a1:96:5e:14:3d:a4:24:51:21:98:17
|
||||
28:46:79:85:75:e6:f4:79:26:8a:db:18:94:35:07:ab
|
||||
de:5f:49:e5:88:02:95:13:d6:ac:ca:e6:4d:65:be:8f
|
||||
a5:f5:27:da:a9:72:b0:d5:6d:9a:4d:45:b6:69:a4:4d
|
||||
|
||||
|
||||
prime1:
|
||||
00:c2:19:9f:3e:b1:d3:f8:18:d0:79:56:3f:6d:d5:67
|
||||
6b:0b:48:bd:4a:b6:c1:c9:1d:70:b5:ff:73:cf:bc:37
|
||||
09:e9:b0:15:a6:6c:ff:bd:20:c9:ea:67:09:ce:f7:fe
|
||||
d1:74:c3:d4:4b:87:38:47:9f:7b:b2:77:a3:a2:db:7d
|
||||
64:d2:77:dc:50:a3:56:2e:44:2a:1c:90:5d:f2:f9:e8
|
||||
4f:84:43:83:a6:b2:48:c4:dc:26:bd:87:d3:e3:f3:be
|
||||
20:cb:7e:ce:ea:b7:93:1f:b9:6b:57:ee:73:d7:d6:08
|
||||
35:b9:10:2f:60:03:e5:68:d5:5d:59:c7:e8:66:7a:51
|
||||
6a:59:75:71:4a:be:1f:83:9c:01:bc:d0:5c:e5:7b:a6
|
||||
5d:7f:f2:4a:e0:a2:31:58:c3:5d:c7:a5:2f:19:1e:10
|
||||
56:c0:fb:83:35:84:c3:d7:ca:f7:3d:9f:1d:95:5e:3f
|
||||
7d:d9:9d:ef:15:a2:15:c2:ae:ff:92:74:db:92:ae:21
|
||||
43:
|
||||
|
||||
prime2:
|
||||
00:d0:18:f2:f7:da:77:4a:6f:60:a0:93:92:d6:7e:da
|
||||
bf:86:19:df:70:f5:41:99:eb:13:49:6d:c2:79:7c:51
|
||||
20:4f:b0:10:01:0d:87:17:90:87:78:41:22:95:f1:72
|
||||
2b:78:97:c3:12:6a:ca:49:73:50:68:fa:d7:12:56:5e
|
||||
d5:bc:3f:eb:e5:ec:55:82:1b:2d:c8:15:da:d4:63:81
|
||||
0e:b3:45:bb:1f:52:9b:b6:3a:96:36:87:79:43:cd:58
|
||||
5d:a4:11:f6:a4:77:5f:9e:df:26:b2:e1:5d:0a:8d:bf
|
||||
32:9d:52:1e:9b:21:66:ca:45:23:23:f4:04:71:23:9a
|
||||
4b:19:e3:10:ff:12:9c:90:b5:ae:80:3e:0e:a8:67:64
|
||||
61:ff:4e:83:db:ae:34:22:94:58:b9:e1:c3:bf:c5:39
|
||||
d2:60:a0:b2:7e:e0:08:92:b7:f2:8c:28:69:2c:9c:97
|
||||
59:b6:55:d9:0a:ff:c3:d3:b4:a6:eb:5a:55:35:59:26
|
||||
03:
|
||||
|
||||
coefficient:
|
||||
51:2c:52:fc:45:b3:05:bf:1b:ca:e3:12:a6:b1:20:8a
|
||||
52:98:d0:87:84:a0:a5:04:12:19:af:13:4c:8c:3c:d7
|
||||
91:bb:c8:0d:cc:7e:14:89:4c:bf:05:c2:fe:f2:7e:29
|
||||
5c:5a:3e:37:6e:9f:16:66:5f:93:83:87:c8:e9:3c:0e
|
||||
de:00:44:18:3b:7a:76:d8:fb:32:b2:4b:db:af:c3:11
|
||||
45:3e:55:ae:ac:94:a5:20:ba:11:d5:4f:01:64:a4:c3
|
||||
70:af:4b:e9:23:a1:9e:b8:7a:3f:79:27:e1:2b:ff:a8
|
||||
ed:1f:7e:0c:27:11:6e:4d:8c:1f:37:90:a6:98:b9:e3
|
||||
5a:a5:04:65:5e:36:a6:1b:2e:32:f3:14:0f:94:3b:88
|
||||
be:94:ee:5d:b0:0b:3f:3e:8b:9b:b6:60:5c:94:5c:88
|
||||
01:54:90:07:8b:69:ab:fe:72:4d:6b:6a:6c:5f:c1:b9
|
||||
5b:52:ef:c6:38:03:06:0c:25:78:73:d1:e1:db:54:46
|
||||
|
||||
|
||||
exp1:
|
||||
33:25:37:3d:f8:f3:c6:db:1b:0b:ed:fb:16:c0:f5:d8
|
||||
52:07:df:c1:31:39:0c:fa:91:f9:93:0f:7c:3c:b7:30
|
||||
08:80:da:a3:98:f3:26:6d:de:66:c2:b1:e5:f4:99:13
|
||||
ae:35:ef:d9:db:0e:ac:68:cc:da:71:06:10:62:cf:be
|
||||
e2:6a:ad:06:1e:94:15:ea:e6:41:d2:94:be:f2:b5:11
|
||||
46:e3:d7:6b:f4:6c:92:5b:04:66:4a:c5:3d:ba:bb:6d
|
||||
be:d1:72:4a:8d:06:da:84:2c:51:e6:46:66:28:42:cf
|
||||
8d:2d:43:9e:84:48:4e:00:72:f1:b6:68:79:a0:5f:95
|
||||
ab:6e:f3:e4:63:06:c0:d2:39:ee:fb:e4:8e:9f:af:6d
|
||||
d1:ca:11:8a:f1:92:19:36:99:9e:82:db:4f:3e:09:c6
|
||||
22:61:e3:e8:15:4c:d9:ae:e4:c9:3b:05:3b:97:b3:19
|
||||
41:5f:89:61:64:ed:60:f8:65:e5:bc:9f:23:1e:79:2b
|
||||
|
||||
|
||||
exp2:
|
||||
5f:18:97:a7:d6:49:1f:55:e8:85:59:0b:08:44:6e:38
|
||||
89:d2:b6:fe:4a:c5:d0:cd:d1:41:84:0c:14:32:50:6c
|
||||
80:9e:07:a2:43:89:51:a6:75:91:e9:ca:21:55:76:04
|
||||
11:96:e0:c9:40:cd:f2:64:e5:01:24:68:36:74:0b:e0
|
||||
86:a7:7b:68:d5:e8:79:8d:6c:0d:7c:97:44:e9:b7:e7
|
||||
7c:db:47:d8:d7:8a:5a:eb:49:0b:e0:3a:f5:56:18:a4
|
||||
aa:3e:9f:44:a7:5c:a6:20:79:f1:d2:f5:0e:c6:99:f2
|
||||
4a:5c:65:aa:24:c8:71:74:c8:cb:3c:4e:ef:59:02:c0
|
||||
81:32:f7:e8:68:9b:ed:b1:68:ee:27:ed:d0:dd:76:cd
|
||||
25:bb:be:9c:1c:6e:ac:c2:b8:0d:31:f3:9f:66:44:b7
|
||||
33:fb:1b:b6:c9:30:81:c3:d7:ee:5e:e5:39:42:d2:13
|
||||
68:34:b0:fb:ca:c7:b5:ae:5f:7d:3c:09:a6:58:77:fb
|
||||
|
||||
|
||||
|
||||
Public Key PIN:
|
||||
pin-sha256:nCxZsiBRLBQ0Lz6/eXIc9kEBwXZg06i/XORB+NNXVrE=
|
||||
Public Key ID:
|
||||
sha256:9c2c59b220512c14342f3ebf79721cf64101c17660d3a8bf5ce441f8d35756b1
|
||||
sha1:5b2df9000451d08f57cd3f86638404ab6338c44b
|
||||
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIG4gIBAAKCAYEAnce8AgNDEv+jvKh6Ywfk5kRfIVND9DzfxRjSVdtYFvQuzP1+
|
||||
3RQW279JJpscsskdAwT30jKV5iIzCLRjeioMJVmnp6p4pLsxNEii3YPWbhNCwrXd
|
||||
0C9k5oRg+yW12wUMI/vmzTu0On1phiwcOw2Ee7wvFRpyGZvfvjv+/UTVMZlPkFKf
|
||||
MbESxCjW/MooykxuNy3V3fN1BEHWj+voGVo/KRMBoHUOQzsY4522muE79KE9t9cv
|
||||
4EeCV09vFui6Xs1O3WvYJ+oWbPg+Lg9sKu6/QdUbw3x6A3olvzRS7A6IJwwHFj26
|
||||
EKHpk+hn25+YYAuGSAPSuW3+xB8pDQQibPHxwL/rO9J8lDRZrMun/AIiaQ9BnAqb
|
||||
9TpEwda22EeDiklGxgXmsvb5gyp5tNwbrnn5+BCb0Qj5lwCpYhueiAYDTjqhLVfv
|
||||
zTmiAGjs48yUnX02PE5zfJL11eWTqER7QApIIK6zLiUjiBwZ3aDCYC1eneJlWQUG
|
||||
xSyYF7fHmwQARVXJAgMBAAECggGARSaL5MnvNL1r0rx4XzzPeohOtTlcGAgx/p0h
|
||||
WlW25uCAPoF/f39VgVv1wIDM9CKmn3Mm9i4LeoBUo6UD0D/rcNc5XoedNn2AVCzd
|
||||
jH5ClZ3Fbbbtj1emPk2Yf5oIeQReTMsTXbGkDNp4TEC64rrK7LwOWo5roYOqbSK4
|
||||
X+IyGfnaYCOF9+5mjihkCQjFFdynlXF2QT95crM0SYGYCLx/4A2fcea7qIWXI/M0
|
||||
W+8JKu8cMJ2UMxTEMGX1BzJatEAAd06Ts/RqnZ/ca48LQ4FD/9VDqZNo9asruY42
|
||||
exMOEVFfqkYkpzsZTTHpKqJ71KhoOJ5w3WiaoPjzJ0CyJBuAk36u0SVukH1/UoSo
|
||||
RhtUycea5aAGlL3UlDPHJfRsE+M44IOXUapSJQbZZLLceVPlNw7kM+b0uxAaZhGf
|
||||
hmmwL5y0+InmpKGWXhQ9pCRRIZgXKEZ5hXXm9HkmitsYlDUHq95fSeWIApUT1qzK
|
||||
5k1lvo+l9SfaqXKw1W2aTUW2aaRNAoHBAMIZnz6x0/gY0HlWP23VZ2sLSL1KtsHJ
|
||||
HXC1/3PPvDcJ6bAVpmz/vSDJ6mcJzvf+0XTD1EuHOEefe7J3o6LbfWTSd9xQo1Yu
|
||||
RCockF3y+ehPhEODprJIxNwmvYfT4/O+IMt+zuq3kx+5a1fuc9fWCDW5EC9gA+Vo
|
||||
1V1Zx+hmelFqWXVxSr4fg5wBvNBc5XumXX/ySuCiMVjDXcelLxkeEFbA+4M1hMPX
|
||||
yvc9nx2VXj992Z3vFaIVwq7/knTbkq4hQwKBwQDQGPL32ndKb2Cgk5LWftq/hhnf
|
||||
cPVBmesTSW3CeXxRIE+wEAENhxeQh3hBIpXxcit4l8MSaspJc1Bo+tcSVl7VvD/r
|
||||
5exVghstyBXa1GOBDrNFux9Sm7Y6ljaHeUPNWF2kEfakd1+e3yay4V0Kjb8ynVIe
|
||||
myFmykUjI/QEcSOaSxnjEP8SnJC1roA+DqhnZGH/ToPbrjQilFi54cO/xTnSYKCy
|
||||
fuAIkrfyjChpLJyXWbZV2Qr/w9O0putaVTVZJgMCgcAzJTc9+PPG2xsL7fsWwPXY
|
||||
UgffwTE5DPqR+ZMPfDy3MAiA2qOY8yZt3mbCseX0mROuNe/Z2w6saMzacQYQYs++
|
||||
4mqtBh6UFermQdKUvvK1EUbj12v0bJJbBGZKxT26u22+0XJKjQbahCxR5kZmKELP
|
||||
jS1DnoRITgBy8bZoeaBflatu8+RjBsDSOe775I6fr23RyhGK8ZIZNpmegttPPgnG
|
||||
ImHj6BVM2a7kyTsFO5ezGUFfiWFk7WD4ZeW8nyMeeSsCgcBfGJen1kkfVeiFWQsI
|
||||
RG44idK2/krF0M3RQYQMFDJQbICeB6JDiVGmdZHpyiFVdgQRluDJQM3yZOUBJGg2
|
||||
dAvghqd7aNXoeY1sDXyXROm353zbR9jXilrrSQvgOvVWGKSqPp9Ep1ymIHnx0vUO
|
||||
xpnySlxlqiTIcXTIyzxO71kCwIEy9+hom+2xaO4n7dDdds0lu76cHG6swrgNMfOf
|
||||
ZkS3M/sbtskwgcPX7l7lOULSE2g0sPvKx7WuX308CaZYd/sCgcBRLFL8RbMFvxvK
|
||||
4xKmsSCKUpjQh4SgpQQSGa8TTIw815G7yA3MfhSJTL8Fwv7yfilcWj43bp8WZl+T
|
||||
g4fI6TwO3gBEGDt6dtj7MrJL26/DEUU+Va6slKUguhHVTwFkpMNwr0vpI6GeuHo/
|
||||
eSfhK/+o7R9+DCcRbk2MHzeQppi541qlBGVeNqYbLjLzFA+UO4i+lO5dsAs/Poub
|
||||
tmBclFyIAVSQB4tpq/5yTWtqbF/BuVtS78Y4AwYMJXhz0eHbVEY=
|
||||
-----END RSA PRIVATE KEY-----
|
182
src/testsuite/ssl/key-my-second-domain-tld.pem
Normal file
182
src/testsuite/ssl/key-my-second-domain-tld.pem
Normal file
@@ -0,0 +1,182 @@
|
||||
Public Key Info:
|
||||
Public Key Algorithm: RSA
|
||||
Key Security Level: High (3072 bits)
|
||||
|
||||
modulus:
|
||||
00:e3:ee:38:da:c7:2c:76:a4:9f:e8:ee:14:3b:f4:6c
|
||||
90:cc:ce:5f:c0:61:0d:c4:b0:ae:11:9e:f7:b8:dd:0a
|
||||
e4:0a:52:a4:ba:39:3d:54:a0:72:b4:0d:d3:24:c4:79
|
||||
4e:32:18:9f:3f:32:b1:a0:14:25:23:fd:36:97:5e:2d
|
||||
57:ff:f1:34:0a:ca:8f:86:be:05:9c:cd:4b:59:a9:dd
|
||||
a7:63:81:37:37:b9:10:d0:1e:61:d5:65:4c:c7:e1:55
|
||||
e1:2f:6c:d9:d4:45:d5:68:95:0b:65:55:89:60:0a:8c
|
||||
5b:c1:8e:39:bb:3e:2b:08:a3:a3:ec:f1:04:64:6c:f7
|
||||
a4:5e:f6:c8:37:5c:c9:02:50:df:99:32:80:a9:aa:85
|
||||
38:47:f4:22:27:9c:fb:07:80:17:4b:d0:95:72:f7:33
|
||||
40:a8:94:2e:7d:68:b4:ff:94:41:0e:00:04:79:4d:b7
|
||||
ca:59:cd:1e:8f:fd:61:b2:f7:53:ef:1a:de:70:59:fa
|
||||
51:78:6b:de:3f:f6:65:da:d9:2c:55:75:ec:d0:24:20
|
||||
b5:e9:de:6e:56:15:ce:3d:35:31:aa:1b:55:6e:7d:fc
|
||||
b1:94:a5:ed:28:43:2d:ab:b7:34:15:5f:70:d9:90:3a
|
||||
06:c0:68:78:96:87:f6:01:ff:b1:32:30:9b:54:be:a8
|
||||
0d:b3:cf:a2:85:c6:f1:32:67:0c:fd:c0:56:13:06:28
|
||||
86:fe:12:10:54:20:42:67:77:fc:fa:65:74:d6:6e:fd
|
||||
0a:40:eb:78:c2:25:41:ce:e5:d5:05:fe:f1:c6:7f:da
|
||||
1f:8f:b7:93:2a:e7:8f:b0:ac:50:75:cc:e3:ef:b1:29
|
||||
16:6a:ee:06:8f:ee:74:5b:37:6d:ab:c3:e5:82:1e:7a
|
||||
af:31:f0:06:9d:2e:ff:e8:08:ca:15:45:b1:98:d5:b1
|
||||
45:73:17:f9:e8:6c:49:b4:ff:5d:09:d0:9b:cf:1e:a1
|
||||
40:4b:cd:07:38:26:b3:52:3e:49:55:27:cd:90:a7:5f
|
||||
6d:
|
||||
|
||||
public exponent:
|
||||
01:00:01:
|
||||
|
||||
private exponent:
|
||||
30:61:85:91:f2:cb:1e:57:ed:55:8d:0b:a0:7a:4e:7d
|
||||
21:ec:00:69:1e:70:c4:ba:58:08:87:7c:bf:b1:b3:b9
|
||||
19:f3:d6:e1:6c:7a:f7:36:a3:82:52:98:e9:ea:06:71
|
||||
b1:b2:86:42:ec:e8:c5:38:e1:75:55:2f:3c:4c:12:45
|
||||
e6:9e:f5:54:01:11:1c:21:c3:a1:37:f6:71:8e:db:ec
|
||||
c6:f3:4b:9c:39:5d:37:3f:eb:b6:57:2d:48:14:2d:9d
|
||||
81:ea:92:06:3b:d8:83:bd:77:50:c8:2a:43:c7:99:69
|
||||
74:99:52:e9:ca:d5:69:9d:0a:93:a5:c9:2f:e3:ed:60
|
||||
e7:83:6c:96:4b:cc:a3:00:35:a6:18:11:35:72:6b:9a
|
||||
b9:b3:39:78:bd:1a:8f:ca:01:a7:e7:1b:81:ee:b4:e3
|
||||
59:a5:32:85:0e:2f:b5:3c:6b:de:a3:e4:4f:37:4e:f6
|
||||
d5:be:f3:68:ce:f8:e8:fb:14:c6:e1:26:2c:24:fd:3b
|
||||
dd:4b:70:c1:20:aa:0b:b5:0d:16:a8:45:4c:97:e9:0b
|
||||
08:97:c3:e9:ae:bf:0b:f7:1c:b1:81:63:ea:f4:72:dd
|
||||
b7:da:5d:ab:21:06:c9:e3:99:3e:6c:c7:15:ca:79:fb
|
||||
44:7b:77:06:69:d9:59:a2:3c:b0:96:7b:66:6f:48:0c
|
||||
42:87:9c:df:4b:3a:dc:15:1f:48:0a:eb:b0:b1:38:98
|
||||
5b:6d:7f:34:ce:43:60:25:64:7c:8d:c0:d1:69:27:b8
|
||||
ac:33:85:be:26:65:98:9f:8a:eb:cf:9a:6b:d7:5b:a3
|
||||
49:60:f9:ff:fb:5f:67:d9:08:20:a1:d8:d0:20:25:d5
|
||||
62:f9:d6:07:82:f6:c6:a6:55:65:71:3f:b8:64:b4:bd
|
||||
35:a9:2d:62:6c:cb:2c:e1:96:f0:9e:40:39:03:3b:10
|
||||
38:72:ac:af:6e:0a:ba:ea:f5:c1:c0:c6:86:60:58:a9
|
||||
28:23:6c:dd:8a:f2:84:76:a5:db:ef:f9:29:b9:b4:81
|
||||
|
||||
|
||||
prime1:
|
||||
00:f5:32:7d:80:4d:14:b1:3d:a1:ef:1b:7f:22:87:9f
|
||||
d4:3d:4d:ce:e2:11:96:29:0f:ea:0b:c4:24:9c:9a:fa
|
||||
8a:4c:9a:5e:cd:48:aa:ce:6d:c0:fd:d4:53:46:1f:06
|
||||
f4:4f:da:2c:e5:f1:cb:19:19:a3:a4:37:11:47:ed:3d
|
||||
fc:4c:b8:f1:93:b8:d8:f7:6a:dd:5c:bd:51:4d:c6:09
|
||||
27:bc:c9:9a:19:05:0a:e9:00:ec:72:75:7f:89:0d:63
|
||||
65:e2:89:ac:ce:f1:78:20:0a:b8:fd:fd:a5:88:a7:7c
|
||||
38:1e:55:7d:16:23:6a:4d:dc:87:56:ef:ff:02:db:bd
|
||||
1b:61:60:b5:8f:7a:e1:d1:26:e3:2d:d5:21:bb:03:84
|
||||
e2:a8:34:d6:7f:16:61:3c:a2:55:e1:c4:8a:82:61:74
|
||||
e0:63:cb:53:fd:6d:6a:0d:f5:b5:55:e0:ef:83:2a:46
|
||||
80:7f:85:57:60:d3:b6:c3:2b:ba:af:88:c8:b8:3c:2c
|
||||
a1:
|
||||
|
||||
prime2:
|
||||
00:ed:f8:fc:68:1c:ae:2e:6d:63:f1:8b:6f:85:5c:5b
|
||||
ba:3e:68:f9:61:03:44:60:83:90:26:8e:4c:8b:e0:49
|
||||
c1:5a:a1:5c:e5:f1:67:43:0b:f6:b5:29:84:40:a8:0f
|
||||
e8:bf:bf:62:7e:33:ca:86:a2:c4:47:3b:4a:d6:9c:09
|
||||
a0:bb:10:00:ec:e6:81:f2:bc:86:3f:58:4d:3a:a4:98
|
||||
94:7e:5d:43:7d:33:3f:53:76:55:d1:73:a4:1f:fb:76
|
||||
75:92:70:8e:82:68:d8:f4:f7:b7:36:fa:3e:cc:a7:7a
|
||||
fc:a4:7b:8c:72:b4:83:d7:ce:d8:f8:b2:35:ce:36:59
|
||||
7e:95:55:b8:c4:a9:44:26:a1:fe:be:f4:b9:67:bc:12
|
||||
c8:e7:c3:0b:8a:51:b6:5c:1b:77:58:1f:53:ac:30:41
|
||||
43:5f:97:a2:fd:70:ac:4a:91:e0:bc:f6:4f:b1:06:47
|
||||
2d:89:77:ae:59:e0:5a:e2:31:c7:d9:a6:10:b8:7e:13
|
||||
4d:
|
||||
|
||||
coefficient:
|
||||
2a:54:f9:93:b2:32:7a:c4:b6:41:0e:1a:8a:0e:d9:db
|
||||
4b:02:68:8d:15:10:84:42:ba:c9:35:e5:6d:ac:8e:ca
|
||||
47:5d:6f:fe:e4:81:c6:ce:ab:7c:b8:5a:59:12:96:a4
|
||||
0b:af:fb:d0:d7:e2:92:60:1b:81:05:4f:43:4c:5c:98
|
||||
e1:84:a8:6e:bf:ad:cc:ac:de:26:d5:a8:58:09:45:ec
|
||||
38:d8:5d:ec:a7:39:46:88:d1:cc:ea:b9:13:5c:9d:bb
|
||||
db:69:d0:a7:e4:0e:33:b1:71:eb:13:14:28:72:45:b0
|
||||
71:05:2a:a1:45:26:6c:a1:35:bf:a8:b0:1d:01:80:d9
|
||||
af:66:71:3a:f4:e4:3c:fe:e8:68:2b:aa:64:a7:43:f3
|
||||
7f:38:4b:51:a1:ed:73:69:52:30:25:b8:62:5b:c7:cd
|
||||
02:f5:6f:4a:21:94:cb:29:44:76:f0:f8:96:50:57:33
|
||||
8c:eb:7b:08:70:fc:bc:fd:69:c1:3a:3a:82:5a:4c:15
|
||||
|
||||
|
||||
exp1:
|
||||
71:83:42:5e:97:50:b1:0d:1b:5e:9a:98:2c:e0:24:ba
|
||||
18:f7:60:83:80:28:c8:31:b9:e4:60:95:a2:7a:8c:ea
|
||||
61:b4:45:97:3b:c0:f7:78:10:14:72:ab:6a:97:0a:9d
|
||||
28:2a:95:06:8e:fd:bb:4d:07:59:0a:b5:51:5b:1f:8b
|
||||
21:e9:ac:cc:fa:92:57:58:7d:ca:65:4a:b2:7a:af:da
|
||||
59:a7:eb:53:11:e6:8f:20:02:56:aa:d6:b4:18:22:a0
|
||||
14:54:30:50:4d:b1:93:03:e3:c8:92:18:84:3f:25:5e
|
||||
c5:8c:46:30:6d:8c:d5:26:f6:f0:e4:82:66:4c:5c:2b
|
||||
c4:d5:04:b8:bb:e6:b6:f1:0d:d3:36:0c:3b:8b:d1:85
|
||||
2c:e1:e9:3b:44:9d:17:78:ff:d1:59:2f:d6:54:4f:cb
|
||||
61:e7:cb:a6:53:74:f9:a9:7a:9d:9b:58:c6:9c:57:af
|
||||
3d:59:f9:ad:b5:d5:b2:5d:18:3c:13:52:f9:17:c2:81
|
||||
|
||||
|
||||
exp2:
|
||||
10:56:1e:65:bb:4a:4d:cf:9e:a3:cf:51:a9:93:0c:8c
|
||||
fd:89:d1:4c:d2:9f:98:0c:90:11:c5:85:05:b9:30:f7
|
||||
00:14:c1:be:db:52:9e:6c:ac:d4:04:f4:9a:47:af:47
|
||||
e8:19:e8:56:07:92:28:a9:f5:d5:7a:01:8a:38:0e:05
|
||||
25:b2:54:8d:ee:c9:0e:f3:d8:37:73:05:62:38:38:6d
|
||||
41:3b:7f:cd:91:7e:10:69:b8:3c:77:b6:d5:a7:3a:9b
|
||||
99:a0:f6:77:87:61:15:78:07:f0:d3:3f:0a:67:98:ee
|
||||
cd:0f:da:35:69:a4:ff:64:a8:ca:71:d9:75:bd:8f:69
|
||||
3c:31:35:4c:f2:dd:c5:d5:2b:1a:ca:cc:0b:8e:02:b0
|
||||
1e:10:ea:b2:e5:27:22:ad:94:04:cd:a9:bd:d1:56:39
|
||||
9c:cf:59:16:12:ed:10:f5:70:bb:28:21:92:62:7e:f2
|
||||
66:54:7b:f8:99:89:43:ab:ed:2f:48:d2:2f:08:20:a5
|
||||
|
||||
|
||||
|
||||
Public Key PIN:
|
||||
pin-sha256:NiuGB0c98aUqMKk4SVQIIwXNglOf+6m1LuVn6aQ2A1U=
|
||||
Public Key ID:
|
||||
sha256:362b8607473df1a52a30a9384954082305cd82539ffba9b52ee567e9a4360355
|
||||
sha1:7678d9a20624ec92b6d458f635f630aed2732b51
|
||||
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIG4gIBAAKCAYEA4+442scsdqSf6O4UO/RskMzOX8BhDcSwrhGe97jdCuQKUqS6
|
||||
OT1UoHK0DdMkxHlOMhifPzKxoBQlI/02l14tV//xNArKj4a+BZzNS1mp3adjgTc3
|
||||
uRDQHmHVZUzH4VXhL2zZ1EXVaJULZVWJYAqMW8GOObs+Kwijo+zxBGRs96Re9sg3
|
||||
XMkCUN+ZMoCpqoU4R/QiJ5z7B4AXS9CVcvczQKiULn1otP+UQQ4ABHlNt8pZzR6P
|
||||
/WGy91PvGt5wWfpReGveP/Zl2tksVXXs0CQgteneblYVzj01MaobVW59/LGUpe0o
|
||||
Qy2rtzQVX3DZkDoGwGh4lof2Af+xMjCbVL6oDbPPooXG8TJnDP3AVhMGKIb+EhBU
|
||||
IEJnd/z6ZXTWbv0KQOt4wiVBzuXVBf7xxn/aH4+3kyrnj7CsUHXM4++xKRZq7gaP
|
||||
7nRbN22rw+WCHnqvMfAGnS7/6AjKFUWxmNWxRXMX+ehsSbT/XQnQm88eoUBLzQc4
|
||||
JrNSPklVJ82Qp19tAgMBAAECggGAMGGFkfLLHlftVY0LoHpOfSHsAGkecMS6WAiH
|
||||
fL+xs7kZ89bhbHr3NqOCUpjp6gZxsbKGQuzoxTjhdVUvPEwSReae9VQBERwhw6E3
|
||||
9nGO2+zG80ucOV03P+u2Vy1IFC2dgeqSBjvYg713UMgqQ8eZaXSZUunK1WmdCpOl
|
||||
yS/j7WDng2yWS8yjADWmGBE1cmuaubM5eL0aj8oBp+cbge6041mlMoUOL7U8a96j
|
||||
5E83TvbVvvNozvjo+xTG4SYsJP073UtwwSCqC7UNFqhFTJfpCwiXw+muvwv3HLGB
|
||||
Y+r0ct232l2rIQbJ45k+bMcVynn7RHt3BmnZWaI8sJZ7Zm9IDEKHnN9LOtwVH0gK
|
||||
67CxOJhbbX80zkNgJWR8jcDRaSe4rDOFviZlmJ+K68+aa9dbo0lg+f/7X2fZCCCh
|
||||
2NAgJdVi+dYHgvbGplVlcT+4ZLS9NaktYmzLLOGW8J5AOQM7EDhyrK9uCrrq9cHA
|
||||
xoZgWKkoI2zdivKEdqXb7/kpubSBAoHBAPUyfYBNFLE9oe8bfyKHn9Q9Tc7iEZYp
|
||||
D+oLxCScmvqKTJpezUiqzm3A/dRTRh8G9E/aLOXxyxkZo6Q3EUftPfxMuPGTuNj3
|
||||
at1cvVFNxgknvMmaGQUK6QDscnV/iQ1jZeKJrM7xeCAKuP39pYinfDgeVX0WI2pN
|
||||
3IdW7/8C270bYWC1j3rh0SbjLdUhuwOE4qg01n8WYTyiVeHEioJhdOBjy1P9bWoN
|
||||
9bVV4O+DKkaAf4VXYNO2wyu6r4jIuDwsoQKBwQDt+PxoHK4ubWPxi2+FXFu6Pmj5
|
||||
YQNEYIOQJo5Mi+BJwVqhXOXxZ0ML9rUphECoD+i/v2J+M8qGosRHO0rWnAmguxAA
|
||||
7OaB8ryGP1hNOqSYlH5dQ30zP1N2VdFzpB/7dnWScI6CaNj097c2+j7Mp3r8pHuM
|
||||
crSD187Y+LI1zjZZfpVVuMSpRCah/r70uWe8EsjnwwuKUbZcG3dYH1OsMEFDX5ei
|
||||
/XCsSpHgvPZPsQZHLYl3rlngWuIxx9mmELh+E00CgcBxg0Jel1CxDRtempgs4CS6
|
||||
GPdgg4AoyDG55GCVonqM6mG0RZc7wPd4EBRyq2qXCp0oKpUGjv27TQdZCrVRWx+L
|
||||
IemszPqSV1h9ymVKsnqv2lmn61MR5o8gAlaq1rQYIqAUVDBQTbGTA+PIkhiEPyVe
|
||||
xYxGMG2M1Sb28OSCZkxcK8TVBLi75rbxDdM2DDuL0YUs4ek7RJ0XeP/RWS/WVE/L
|
||||
YefLplN0+al6nZtYxpxXrz1Z+a211bJdGDwTUvkXwoECgcAQVh5lu0pNz56jz1Gp
|
||||
kwyM/YnRTNKfmAyQEcWFBbkw9wAUwb7bUp5srNQE9JpHr0foGehWB5IoqfXVegGK
|
||||
OA4FJbJUje7JDvPYN3MFYjg4bUE7f82RfhBpuDx3ttWnOpuZoPZ3h2EVeAfw0z8K
|
||||
Z5juzQ/aNWmk/2SoynHZdb2PaTwxNUzy3cXVKxrKzAuOArAeEOqy5ScirZQEzam9
|
||||
0VY5nM9ZFhLtEPVwuyghkmJ+8mZUe/iZiUOr7S9I0i8IIKUCgcAqVPmTsjJ6xLZB
|
||||
DhqKDtnbSwJojRUQhEK6yTXlbayOykddb/7kgcbOq3y4WlkSlqQLr/vQ1+KSYBuB
|
||||
BU9DTFyY4YSobr+tzKzeJtWoWAlF7DjYXeynOUaI0czquRNcnbvbadCn5A4zsXHr
|
||||
ExQockWwcQUqoUUmbKE1v6iwHQGA2a9mcTr05Dz+6GgrqmSnQ/N/OEtRoe1zaVIw
|
||||
JbhiW8fNAvVvSiGUyylEdvD4llBXM4zrewhw/Lz9acE6OoJaTBU=
|
||||
-----END RSA PRIVATE KEY-----
|
6
src/testsuite/start-server3
Executable file
6
src/testsuite/start-server3
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
# ngIRCd Test Suite
|
||||
|
||||
[ -z "$srcdir" ] && srcdir=`dirname $0`
|
||||
${srcdir}/start-server.sh 3
|
||||
# -eof-
|
7
src/testsuite/stop-server3
Executable file
7
src/testsuite/stop-server3
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
# ngIRCd Test Suite
|
||||
|
||||
[ -z "$srcdir" ] && srcdir=`dirname $0`
|
||||
${srcdir}/stop-server.sh 3
|
||||
|
||||
# -eof-
|
5
src/testsuite/switch-server3
Executable file
5
src/testsuite/switch-server3
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
cp ssl/cert-my-second-domain-tld.pem ssl/cert.pem
|
||||
cp ssl/key-my-second-domain-tld.pem ssl/key.pem
|
||||
cp ssl/dhparams-my-second-domain-tld.pem ssl/dhparams.pem
|
||||
# -eof-
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2018 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
|
||||
@@ -82,7 +82,7 @@ ngt_UpperStr(char *String)
|
||||
|
||||
ptr = String;
|
||||
while(*ptr) {
|
||||
*ptr = toupper((int)*ptr);
|
||||
*ptr = (char)toupper(*ptr);
|
||||
ptr++;
|
||||
}
|
||||
return String;
|
||||
@@ -101,7 +101,7 @@ ngt_LowerStr(char *String)
|
||||
|
||||
ptr = String;
|
||||
while(*ptr) {
|
||||
*ptr = tolower((int)*ptr);
|
||||
*ptr = (char)tolower(*ptr);
|
||||
ptr++;
|
||||
}
|
||||
return String;
|
||||
|
Reference in New Issue
Block a user