1
0
mirror of https://github.com/osmarks/ngircd.git synced 2025-10-29 13:07:40 +00:00

Compare commits

...

76 Commits

Author SHA1 Message Date
Alexander Barton
03aec7d0b3 ngIRCd Release 26~rc1 2020-05-10 17:13:51 +02:00
Alexander Barton
5d5fdfb3fd Update config.guess and config.sub to recent versions
- config.guess: 2020-04-26
- config.sub: 2020-05-04

And set both scripts +x, they are executable.
2020-05-10 17:09:23 +02:00
Alexander Barton
05261c020e Update NEWS and ChangeLog files 2020-05-10 01:09:34 +02:00
Alexander Barton
e860807500 Add missing authors to AUTHORS, tweak ".mailmap" file 2020-05-10 00:16:11 +02:00
Alexander Barton
e889de9d92 Tweak & update doc/HowToRelease.txt a bit ... 2020-05-10 00:14:04 +02:00
Alexander Barton
fcf2874a9d Allow more characters per line in MOTD and help text files
Change the line buffer in the Read_TextFile() function from 127 to
COMMAND_LEN (=512) bytes. Lines can't even get that long, because they
have to be prefixed before being sent to the client, so this is a sane
maximum.

This allows for even more "fancy" and "wider" MOTDs :-)

Closes #271.
2020-05-07 18:10:41 +02:00
Alexander Barton
4b7e8db418 Show allowed channel types in ISUPPORT(005) numeric only
Don't show the static list of all possibly available channel types ...

Closes #273.
2020-05-07 18:03:06 +02:00
Alexander Barton
bc22f41c51 Platforms.txt: Add x86_64/apple/darwin19.0.0
- Add x86_64/apple/darwin19.0.0 (Apple clang 11.0)
2020-05-07 17:53:13 +02:00
Alexander Barton
d11f13f187 Update Platforms.txt
- Update powerpc/apple/darwin8.11.0 (gcc 4.0.1)
- Add mips/sgi/irix6.5 (SGI C compiler)
- Add mipsel/unknown/netbsd8.0 (gcc 5.5.0)

Thanks to Götz Hoffart <goetz@hoffart.de>!
2020-05-07 17:52:51 +02:00
Alexander Barton
21f33e5911 SSL test server: Use port 6790, like "test server #2"
Don't use the "standard" IRC SSL port 6697, as this easily collides with
real (ng)IRCd instances running on the same machine.

And by reusing port 6790, which is already used by the "test server #2",
we don't need any other port than the test suite already uses.
2020-05-07 00:02:00 +02:00
Alexander Barton
db88b92c8a Git: Ignore generated files of SSL tests 2020-05-06 23:47:28 +02:00
Alexander Barton
02850008f4 Merge pull request #269 from hillu/gnutls-reload-cert
Add support for GnuTLS certificate reload.

Thanks a lot, Hilko Bengen!
2020-05-06 23:36:19 +02:00
Alexander Barton
52d8fa2c09 Update Client_SetHostname() to not use strpbrk()
Not sure about the portability of strpbrk() in really ancient OS, and
this was the only place where it became used recently in ngIRCd ...
So let's play it safe! ;-)
2020-05-04 00:58:24 +02:00
michi
1f40776bc1 Allow hostmask cloaking when rDNS is disabled 2020-05-04 00:58:24 +02:00
Alexander Barton
387a29a7fd Don't wait for the network when read buffers possibly hold commands
There is no point in waiting up to one second for the network receiving
new data when there is still a read buffer holding at least one command;
we shouldn't waste time but handle it immediately!
2020-05-04 00:46:56 +02:00
Alexander Barton
54fac57603 Handle commands in the read buffer before reading more data
If there are more bytes in the read buffer already than a single valid
IRC command can get long (513 bytes, COMMAND_LEN), 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).
2020-05-04 00:46:56 +02:00
Alexander Barton
9f05f5ee61 Read_Request(): Clean up code and add some more comments
No functional changes.
2020-05-04 00:46:56 +02:00
Alexander Barton
629a45ee0f Revert "Increase read buffer size for server connections"
This reverts commit c6e3c13f27.

This sounded like the right approach at first, but I'm not that sure
that it really makes sense to have different sizes of read buffers: the
per-connection read buffer only needs to keep data that is needed to
parse one full command, be it plain text, encrypted and/or compressed.
Then ngIRCd should handle this one command, move leftover data to the
beginning of the buffer and read the next chunk from the network that is
missing to get the next complete command (512 bytes at max).

So I revert this for now and try to fix the logic in Read_Request(),
which is broken nevertheless, as it results in servers becoming
disconnected during "server burst" when "big" lists are transferred.
2020-05-04 00:46:56 +02:00
Alexander Barton
8d414b079c Correctly use Config_Error() instead of Log() in Read_Config()
The name of the Config_Error() function is misleading: it is not only
used to show configuraton errors, but all messages shown during normal
operation as well as for "config testing": it takes care of the correct
formatting of the messages (syslog, forground logging, config testing).

This fixes commit bb1d014aba.
2020-05-03 17:08:51 +02:00
Alexander Barton
8a37695bf3 contrib/nglog.sh: Looks like GNU awk (gawk) is needed ... 2020-05-03 17:07:51 +02:00
Alexander Barton
71e9bb1ca6 Update Travis-CI configuration, "sudo" is depreacted 2020-05-03 03:15:56 +02:00
Alexander Barton
0dc692b1f7 Log G-/K-Line changes only when not initiated by a server
This prevents the log from becomming spammed during "net bursts".
2020-05-03 03:15:49 +02:00
Alexander Barton
79a917f954 Set the "last data" time to "last ping" time when updating the latter
This is required because the PING can be received quite a bit earlier
than it is actually handled, for example during "server burst" or other
heavy operations:
So the times won't match and PING-PONG logic would become garbled,
because we test for "last ping > last data" to determine if a PING
already was sent or not.
2020-05-03 03:15:38 +02:00
Johann Hartwig Hauschild
11ea6a5070 updating testsuite to support ssl-tests 2020-04-25 00:04:38 +02:00
Alexander Barton
42e8654d7b INSTALL.md: Add not about removed legacy options 2020-04-20 19:31:57 +02:00
sam_c
1fc54ebef1 Makefile.am: Replace make with ${MAKE} (#270)
Fixes warnings such as:
"warning: jobserver unavailable: using -j1. Add `+' to parent make rule."

Signed-off-by: Sam James (sam_c) <sam@cmpct.info>
2020-04-20 19:29:16 +02:00
Alexander Barton
c2c84a1d26 Update AUTHORS file 2020-04-20 19:25:28 +02:00
Alexander Barton
05324b232f ChangeLog: Add missing patch attribution 2020-04-20 19:25:02 +02:00
Alexander Barton
ea1207238f Update NEWS and ChangeLog files 2020-04-20 19:14:54 +02:00
Alexander Barton
830f00e953 contrib/nglog.sh: Use bash(1) as interpreter
bash(1) is required to handle the forking and output redirection
connectly, sh(1) -- at least dash(1) on Debian -- fails ...

This fixes the last commit, 14777c18c.
2020-04-20 10:01:09 +02:00
Alexander Barton
14777c18cf contrib/nglog.sh: Fork awk(1), deal better with signals (CTRL-C) 2020-04-20 00:55:24 +02:00
Alexander Barton
e4a6bd5099 Update Xcode project for latest Xcode version (11.4.1) 2020-04-20 00:54:06 +02:00
michi
ab62dd27dc Remove legacy configuration options
Remove legacy configuration options and related functions that have
been marked for removal for some time:

- PredefChannelsOnly (v22)
- NoticeAuth (v24)
- NoXXX (v19)
- Old '[GLOBAL]' section handling (v19)
2020-04-20 00:20:50 +02:00
michi
c6e3c13f27 Increase read buffer size for server connections
This applies the same logic we have for write buffers to distinguish
between server and client connections and sets the maximum buffer size
accordingly. As a result peering with servers with many GLINE/KLINEs
does not kill the connecting server connection anymore.
2020-04-20 00:20:46 +02:00
michi
04de1423eb Fix recursion bug on write error
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().
2020-04-20 00:20:46 +02:00
michi
13b8324c4a Fix hostmask cloaking bug for IPv6 too 2020-04-20 00:20:46 +02:00
michi
f27827d793 Unbreak GCC 10 (-fno-common) build 2020-04-20 00:20:46 +02:00
Hilko Bengen
86f3c563d6 GnuTLS: Eliminate memory leaks for DH parameters, priorities cache
The DH parameters reference has to be stored next to the x509_cred
which holds a reference to it.
2020-04-19 21:20:43 +02:00
Hilko Bengen
eead4a631f Add support for GnuTLS certificate reload
This requires keeping track of currently active certificates, so those
are stored separately, along with a reference counter, and discarded
when they are no longer in use.
2020-04-17 17:34:12 +02:00
Alexander Barton
9c5e42458e Update documentation to reflect "[Channel]->Modes" changes
No longer mention "[Channel]->Key" and "[Channel]->MaxUsers".
2020-03-29 23:17:21 +02:00
Alexander Barton
61ac8be2fd Convert INSTALL and README files to Markdown
This requires some changes to the build system, for example to comply
with the expectations of the GNU autoconf/automake tools ...
2020-03-29 22:33:51 +02:00
Alexander Barton
3aa1d880fe Add deprecation warnings for "Key" and "MaxUsers" in [Channel] 2020-03-29 22:31:18 +02:00
Alexander Barton
ba3b22b851 Test suite: Test multiple "Modes" lines in [Channel] sections 2020-03-29 01:16:37 +01:00
Alexander Barton
4d519cfdbf Predefined channles: Fix handling of legacy configuration options
Fix the handling of legacy "Key" and "MaxUsers" [Channel] settings:

- Activate them before evaluating the "Modes" parameter, to allow the
  latter to override those legacy options.
- Enforce setting the respective +k/+l 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.
- Sort modes +kl alphabetically, adjust test suite accordingly.
2020-03-29 00:45:59 +01:00
Alexander Barton
fed22184c5 Enhance logging while setting up predefined channels 2020-03-29 00:30:36 +01:00
michi
a3072ce698 Allow multiple "Modes =" lines per [Channel] section 2020-03-29 00:29:50 +01:00
michi
decf98d5ef Evaluate initial channel modes
Allow setting arbitrary channel modes in the config file.

Closes #55.
2020-03-28 23:47:21 +01:00
Alexander Barton
a77353361b Xcode: add missing files in src/testsuite, and sort them 2020-03-28 23:46:16 +01:00
Alexander Barton
3f7caff630 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.
2020-03-22 14:07:32 +01:00
Alexander Barton
8d173a3328 Fix memory leak in portabtest Check_strtok_r()
Fix the following Clang "LeakSanitizer" error (which isn't quite
relevant in this test program, but anyway):

  ERROR: LeakSanitizer: detected memory leaks

  Direct leak of 7 byte(s) in 1 object(s) allocated from:
      #0 0x7f8c4d022810 in strdup (/lib/x86_64-linux-gnu/libasan.so.5+0x3a810)
      #1 0x5601a801491a in Check_strtok_r (/net/arthur/home/alex/Develop/ngIRCd/ngIRCd.git/src/portab/portabtest+0x291a)
      #2 0x5601a8014d77 in main (/net/arthur/home/alex/Develop/ngIRCd/ngIRCd.git/src/portab/portabtest+0x2d77)
      #3 0x7f8c4c69009a in __libc_start_main ../csu/libc-start.c:308

  SUMMARY: AddressSanitizer: 7 byte(s) leaked in 1 allocation(s).
  FAIL: portabtest
2020-02-15 14:56:07 +01:00
michi
e7cb9b1a00 Reuse old SSL key if loading a new one failed 2020-02-15 14:47:20 +01:00
Alexander Barton
c411643d45 Update Xcode project for latest Xcode version (11.3.1) 2020-02-11 20:33:44 +01:00
Alexander Barton
2e1797d5a5 Remove outdated OpenBSD/NetBSD systrace.policy
Systrace was removed from OpenBSD and NetBSD, so remove this (old and
outdated?) configuration file from the ./contrib directory.

See <https://en.wikipedia.org/wiki/Systrace>.

Thanks to "michi" for pointing this out on #ngircd!
2020-02-11 20:31:15 +01:00
Alexander Barton
f5fa7db4ba 2020! 2020-01-21 22:02:40 +01:00
Alexander Barton
22cae1b5fc Enhance handling of command line errors, and "--help" & "--version"
Return with exit code 0 ("no error") when "--help" or "--version" was
used (this resulted in exit code 1, "error" before).

And exit with code 2 ("command line error") for all invalid command
line options, and show the error message on stderr (message was printed
to stdout before, and exit code was 1, "generic error").

This new behaviour is more in line with the GNU "coding standards",
see <https://www.gnu.org/prep/standards/html_node/_002d_002dhelp.html>.
2019-12-31 16:34:23 +01:00
Alexander Barton
fb5aa8f652 Fix and update Xcode project
- Reference correct contrib/Makefile.am file
- Correctly sort contrib/nglog.sh
- Add "ORGANIZATIONNAME" setting
2019-12-16 16:57:56 +01:00
Alexander Barton
91e87af605 Update ngindent.sh name in Makefile and Xcode project, too 2019-12-16 16:54:13 +01:00
Alexander Barton
9286686c09 contrib/README: Add nglog.sh script to the list 2019-12-07 01:43:00 +01:00
Alexander Barton
1f69f1d0ab contrib/nglog.sh: Use bright colors for warning & error messages 2019-12-07 01:42:33 +01:00
Alexander Barton
b03fcaab5a contrib/ngindent.sh: Enhance and rename script
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.
2019-12-07 01:41:39 +01:00
Windree
70eb1ee57d Update install documentation: libgnutls-dev
According https://packages.debian.org/search?keywords=libgnutls28-dev
in Ubuntu and Debian libgnutls-dev package name is libgnutls28-dev

Closes #264.

Thanks Windree!
2019-12-02 00:45:09 +01:00
Alexander Barton
80437b2533 Add simple log colorization script: ./contrib/nglog.sh
This script parses the log output of ngircd(8), and colorizes the
messages accoring to their log level. Example usage:

ngircd -f $PWD/doc/sample-ngircd.conf -np | ./contrib/nglog.sh
2019-11-10 22:07:26 +01:00
Alexander Barton
de1de40551 Log received signals (using strsignal(3), when available) 2019-11-10 21:12:43 +01:00
Alexander Barton
4169cb25e6 Make test suite compatible with Haiku 2019-11-03 15:15:59 +01:00
Alexander Barton
9a69c02567 Add VIM "swap files" (*.swp) to .gitignore file 2019-11-03 15:01:51 +01:00
JRMU
147e424d98 Fix hostmask cloaking bug, don't cloak multiple times
Previously, each server would cloak every user's hostmask. The problem
is that if a network has more than one server, then a user's hostmask
would get cloaked twice. This patch ensures that a server only cloaks
the hostmask if it has not yet been cloaked (the period indicates it's
still an IP address).

Closes #228.
2019-09-09 15:30:44 +02:00
Alexander Barton
e954b59d41 Fix some typos (documentation files, ngircd.conf manual page, ...)
Spotted by Étienne Mollier <etienne.mollier@mailoo.org> and Christoph
Biedl <debian.axhn@manchmal.in-ulm.de>, see Debian bug #932462
(https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=932462). Thank you!
2019-07-21 16:23:07 +02:00
Alexander Barton
b1893e740e Make sure HAVE_LIBSSL is defined, even when using pkg-config
Without this, the configure script assumes and states that OpenSSL will
be used, but the code won't include support for it because there we use
the "HAVE_LIBSSL" define to test for it ("#ifdef HAVE_LIBSSL").

So define the latter when pkg-config(1) is used, too.

This fixes #257, a regression introduced by commit ad86a41ee :-/
2019-07-01 22:03:47 +02:00
Alexander Barton
2c495a1fe7 Enlage 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.
2019-06-29 16:13:16 +02:00
Alexander Barton
52c53f523a Add ".vscode" to .gitignore file 2019-06-29 16:04:59 +02:00
Alexander Barton
f8002057f2 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.
2019-06-29 16:02:52 +02:00
Alexander Barton
13122bc97d Fix and extend documentation a little bit
- Fix syntax of LINKS amd LIST commands.
- Whitespace and spelling fixes.
- Add some more information about IRCv3 support.
2019-06-29 16:02:18 +02:00
Alexander Barton
bb1d014aba Slightly reoder 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, ...
2019-06-29 16:00:53 +02:00
Alexander Barton
ad8c4b8efb Update autogen.sh & INSTALL for pkg-config requirements 2019-04-20 18:51:39 +02:00
Fabrice Fontaine
ad86a41eee configure.ng: use pkg-config to find PpenSSL dependencies
OpenSSL can depends on lz or latomic so use pkg-config to find those
dependencies and fallback to existing mechanism.

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>

Closes #256.
2019-04-20 18:50:09 +02:00
Christoph Biedl
aec86aa84c ngircd.conf.5: Fix wording as suggested by lintian 2019-01-28 10:45:53 +01:00
72 changed files with 3607 additions and 2369 deletions

13
.gitignore vendored
View File

@@ -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

View File

@@ -6,6 +6,8 @@ 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>
@@ -14,3 +16,7 @@ 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>

View File

@@ -1,5 +1,4 @@
language: c
sudo: false
addons:
apt:
packages:

View File

@@ -2,7 +2,7 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2019 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.
@@ -40,21 +40,27 @@ Dana Dahlstrom <dana+ngIRCd@cs.ucsd.edu>
David Kingston <deathking1337@aim.com>
DNS <dns@rbose.org>
Eric Grunow <egrunow@ucsd.edu>
Fabrice Fontaine <fontaine.fabrice@gmail.com>
Federico G. Schwindt <fgsch@lodoss.net>
Gabor Adam Toth <tg@tgbit.net>
Götz Hoffart <goetz@hoffart.de>
Hilko Bengen <bengen@hilluzination.de>
Ian Chard <ian@chard.org>
Ilja Osthoff <i.osthoff@gmx.net>
ItsOnlyBinary <ItsOnlyBinary@users.noreply.github.com>
James Lu <james@overdrivenetworks.com>
Jari Aalto <jari.aalto@cante.net>
Johann Hartwig Hauschild <git@hauschild.it>
JRMU <jrmu@lecturify.com>
LucentW <lucent@zebes.info>
Mantas Mikulėnas <grawity@gmail.com>
Michi <michi+ngircd@dataswamp.org>
Neale Pickett <neale@woozle.org>
Peter Powell <petpow@saberuk.com>
Rolf Eike Beer <eike@sf-mail.de>
Rosen Penev <rosenp@gmail.com>
Roy Sindre Norangshol <roy.sindre@norangshol.no>
Sam James <sam@cmpct.info>
Scott Perry <scperry@ucsd.edu>
Sean Reifschneider <jafo-rpms@tummy.com>
Sebastian Köhler <sebkoehler@whoami.org.uk>
@@ -63,6 +69,7 @@ Tassilo Schweyer <dev@welterde.de>
Tom Ryder <tom@sanctum.geek.nz>
Unit 193 <unit193@ubuntu.com>
William Pitcock <nenolod@dereferenced.org>
Windree <57554809+Windree@users.noreply.github.com>
xor <xorboy@gmail.com>
Yecheng Fu <cofyc.jackson@gmail.com>

110
ChangeLog
View File

@@ -2,12 +2,116 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2019 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.
-- ChangeLog --
ngIRCd 26
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 depreacted.
- Log G-/K-Line changes only when not initiated by a server: this prevents
the log from becomming 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)
@@ -201,7 +305,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
@@ -554,7 +658,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
View File

@@ -1,367 +0,0 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2019 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- 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!

411
INSTALL.md Normal file
View File

@@ -0,0 +1,411 @@
# [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
```
### `./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!

View File

@@ -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

65
NEWS
View File

@@ -2,12 +2,73 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2019 Alexander Barton and Contributors.
(c)2001-2020 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- NEWS --
ngIRCd 26
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 becomming 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
@@ -297,7 +358,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
View File

@@ -1,89 +0,0 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2019 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- 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.

76
README.md Normal file
View File

@@ -0,0 +1,76 @@
# [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 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 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 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

View File

@@ -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

366
config.guess vendored Normal file → Executable file
View File

@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright 1992-2018 Free Software Foundation, Inc.
# Copyright 1992-2020 Free Software Foundation, Inc.
timestamp='2018-03-08'
timestamp='2020-04-26'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
Copyright 1992-2018 Free Software Foundation, Inc.
Copyright 1992-2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -84,8 +84,6 @@ if test $# != 0; then
exit 1
fi
trap 'exit 1' 1 2 15
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
# temporary files to be created and, as you can see below, it is a
@@ -96,34 +94,40 @@ trap 'exit 1' 1 2 15
# Portable tmp directory creation inspired by the Autoconf team.
set_cc_for_build='
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
: ${TMPDIR=/tmp} ;
{ tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
dummy=$tmp/dummy ;
tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
case $CC_FOR_BUILD,$HOST_CC,$CC in
,,) echo "int x;" > "$dummy.c" ;
for c in cc gcc c89 c99 ; do
if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
CC_FOR_BUILD="$c"; break ;
fi ;
done ;
if test x"$CC_FOR_BUILD" = x ; then
CC_FOR_BUILD=no_compiler_found ;
fi
;;
,,*) CC_FOR_BUILD=$CC ;;
,*,*) CC_FOR_BUILD=$HOST_CC ;;
esac ; set_cc_for_build= ;'
tmp=
# shellcheck disable=SC2172
trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
set_cc_for_build() {
# prevent multiple calls if $tmp is already set
test "$tmp" && return 0
: "${TMPDIR=/tmp}"
# shellcheck disable=SC2039
{ tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
dummy=$tmp/dummy
case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
,,) echo "int x;" > "$dummy.c"
for driver in cc gcc c89 c99 ; do
if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
CC_FOR_BUILD="$driver"
break
fi
done
if test x"$CC_FOR_BUILD" = x ; then
CC_FOR_BUILD=no_compiler_found
fi
;;
,,*) CC_FOR_BUILD=$CC ;;
,*,*) CC_FOR_BUILD=$HOST_CC ;;
esac
}
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 1994-08-24)
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
if test -f /.attbin/uname ; then
PATH=$PATH:/.attbin ; export PATH
fi
@@ -138,7 +142,7 @@ Linux|GNU|GNU/*)
# We could probably try harder.
LIBC=gnu
eval "$set_cc_for_build"
set_cc_for_build
cat <<-EOF > "$dummy.c"
#include <features.h>
#if defined(__UCLIBC__)
@@ -199,7 +203,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
os=netbsdelf
;;
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval "$set_cc_for_build"
set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
then
@@ -237,7 +241,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
echo "$machine-${os}${release}${abi}"
echo "$machine-${os}${release}${abi-}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -260,6 +264,9 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
*:SolidBSD:*:*)
echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
exit ;;
*:OS108:*:*)
echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
exit ;;
macppc:MirBSD:*:*)
echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
exit ;;
@@ -269,12 +276,15 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
*:Sortix:*:*)
echo "$UNAME_MACHINE"-unknown-sortix
exit ;;
*:Twizzler:*:*)
echo "$UNAME_MACHINE"-unknown-twizzler
exit ;;
*:Redox:*:*)
echo "$UNAME_MACHINE"-unknown-redox
exit ;;
mips:OSF1:*.*)
echo mips-dec-osf1
exit ;;
echo mips-dec-osf1
exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -389,7 +399,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
echo i386-pc-auroraux"$UNAME_RELEASE"
exit ;;
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
eval "$set_cc_for_build"
set_cc_for_build
SUN_ARCH=i386
# If there is a compiler, see if it is configured for 64-bit objects.
# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
@@ -482,7 +492,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
echo clipper-intergraph-clix"$UNAME_RELEASE"
exit ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
eval "$set_cc_for_build"
set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#ifdef __cplusplus
#include <stdio.h> /* for printf() prototype */
@@ -579,7 +589,7 @@ EOF
exit ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
eval "$set_cc_for_build"
set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#include <sys/systemcfg.h>
@@ -660,7 +670,7 @@ EOF
esac
fi
if [ "$HP_ARCH" = "" ]; then
eval "$set_cc_for_build"
set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#define _HPUX_SOURCE
@@ -700,7 +710,7 @@ EOF
esac
if [ "$HP_ARCH" = hppa2.0w ]
then
eval "$set_cc_for_build"
set_cc_for_build
# hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
# 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
@@ -726,7 +736,7 @@ EOF
echo ia64-hp-hpux"$HPUX_REV"
exit ;;
3050*:HI-UX:*:*)
eval "$set_cc_for_build"
set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#include <unistd.h>
int
@@ -840,6 +850,17 @@ EOF
*:BSD/OS:*:*)
echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
exit ;;
arm:FreeBSD:*:*)
UNAME_PROCESSOR=`uname -p`
set_cc_for_build
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP
then
echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi
else
echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf
fi
exit ;;
*:FreeBSD:*:*)
UNAME_PROCESSOR=`/usr/bin/uname -p`
case "$UNAME_PROCESSOR" in
@@ -881,7 +902,7 @@ EOF
echo "$UNAME_MACHINE"-pc-uwin
exit ;;
amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
echo x86_64-unknown-cygwin
echo x86_64-pc-cygwin
exit ;;
prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
@@ -894,8 +915,8 @@ EOF
# other systems with GNU libc and userland
echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
exit ;;
i*86:Minix:*:*)
echo "$UNAME_MACHINE"-pc-minix
*:Minix:*:*)
echo "$UNAME_MACHINE"-unknown-minix
exit ;;
aarch64:Linux:*:*)
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
@@ -905,7 +926,7 @@ EOF
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
exit ;;
alpha:Linux:*:*)
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
EV5) UNAME_MACHINE=alphaev5 ;;
EV56) UNAME_MACHINE=alphaev56 ;;
PCA56) UNAME_MACHINE=alphapca56 ;;
@@ -922,7 +943,7 @@ EOF
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
exit ;;
arm*:Linux:*:*)
eval "$set_cc_for_build"
set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
@@ -971,23 +992,51 @@ EOF
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
exit ;;
mips:Linux:*:* | mips64:Linux:*:*)
eval "$set_cc_for_build"
set_cc_for_build
IS_GLIBC=0
test x"${LIBC}" = xgnu && IS_GLIBC=1
sed 's/^ //' << EOF > "$dummy.c"
#undef CPU
#undef ${UNAME_MACHINE}
#undef ${UNAME_MACHINE}el
#undef mips
#undef mipsel
#undef mips64
#undef mips64el
#if ${IS_GLIBC} && defined(_ABI64)
LIBCABI=gnuabi64
#else
#if ${IS_GLIBC} && defined(_ABIN32)
LIBCABI=gnuabin32
#else
LIBCABI=${LIBC}
#endif
#endif
#if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
CPU=mipsisa64r6
#else
#if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
CPU=mipsisa32r6
#else
#if defined(__mips64)
CPU=mips64
#else
CPU=mips
#endif
#endif
#endif
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
CPU=${UNAME_MACHINE}el
MIPS_ENDIAN=el
#else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
CPU=${UNAME_MACHINE}
MIPS_ENDIAN=
#else
CPU=
MIPS_ENDIAN=
#endif
#endif
EOF
eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`"
test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
;;
mips64el:Linux:*:*)
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
@@ -1100,7 +1149,7 @@ EOF
*Pentium) UNAME_MACHINE=i586 ;;
*Pent*|*Celeron) UNAME_MACHINE=i686 ;;
esac
echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}"
exit ;;
i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
@@ -1284,38 +1333,39 @@ EOF
echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
exit ;;
*:Darwin:*:*)
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
eval "$set_cc_for_build"
if test "$UNAME_PROCESSOR" = unknown ; then
UNAME_PROCESSOR=powerpc
UNAME_PROCESSOR=`uname -p`
case $UNAME_PROCESSOR in
unknown) UNAME_PROCESSOR=powerpc ;;
esac
if command -v xcode-select > /dev/null 2> /dev/null && \
! xcode-select --print-path > /dev/null 2> /dev/null ; then
# Avoid executing cc if there is no toolchain installed as
# cc will be a stub that puts up a graphical alert
# prompting the user to install developer tools.
CC_FOR_BUILD=no_compiler_found
else
set_cc_for_build
fi
if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
case $UNAME_PROCESSOR in
i386) UNAME_PROCESSOR=x86_64 ;;
powerpc) UNAME_PROCESSOR=powerpc64 ;;
esac
fi
# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_PPC >/dev/null
then
UNAME_PROCESSOR=powerpc
fi
if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
case $UNAME_PROCESSOR in
i386) UNAME_PROCESSOR=x86_64 ;;
powerpc) UNAME_PROCESSOR=powerpc64 ;;
esac
fi
# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_PPC >/dev/null
then
UNAME_PROCESSOR=powerpc
fi
elif test "$UNAME_PROCESSOR" = i386 ; then
# Avoid executing cc on OS X 10.9, as it ships with a stub
# that puts up a graphical alert prompting to install
# developer tools. Any system running Mac OS X 10.7 or
# later (Darwin 11 and later) is required to have a 64-bit
# processor. This is not true of the ARM version of Darwin
# that Apple uses in portable devices.
UNAME_PROCESSOR=x86_64
# uname -m returns i386 or x86_64
UNAME_PROCESSOR=$UNAME_MACHINE
fi
echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
exit ;;
@@ -1358,6 +1408,7 @@ EOF
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
# operating systems.
# shellcheck disable=SC2154
if test "$cputype" = 386; then
UNAME_MACHINE=i386
else
@@ -1414,8 +1465,148 @@ EOF
amd64:Isilon\ OneFS:*:*)
echo x86_64-unknown-onefs
exit ;;
*:Unleashed:*:*)
echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
exit ;;
esac
# No uname command or uname output not recognized.
set_cc_for_build
cat > "$dummy.c" <<EOF
#ifdef _SEQUENT_
#include <sys/types.h>
#include <sys/utsname.h>
#endif
#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
#include <signal.h>
#if defined(_SIZE_T_) || defined(SIGLOST)
#include <sys/utsname.h>
#endif
#endif
#endif
main ()
{
#if defined (sony)
#if defined (MIPSEB)
/* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
I don't know.... */
printf ("mips-sony-bsd\n"); exit (0);
#else
#include <sys/param.h>
printf ("m68k-sony-newsos%s\n",
#ifdef NEWSOS4
"4"
#else
""
#endif
); exit (0);
#endif
#endif
#if defined (NeXT)
#if !defined (__ARCHITECTURE__)
#define __ARCHITECTURE__ "m68k"
#endif
int version;
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
if (version < 4)
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
else
printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
exit (0);
#endif
#if defined (MULTIMAX) || defined (n16)
#if defined (UMAXV)
printf ("ns32k-encore-sysv\n"); exit (0);
#else
#if defined (CMU)
printf ("ns32k-encore-mach\n"); exit (0);
#else
printf ("ns32k-encore-bsd\n"); exit (0);
#endif
#endif
#endif
#if defined (__386BSD__)
printf ("i386-pc-bsd\n"); exit (0);
#endif
#if defined (sequent)
#if defined (i386)
printf ("i386-sequent-dynix\n"); exit (0);
#endif
#if defined (ns32000)
printf ("ns32k-sequent-dynix\n"); exit (0);
#endif
#endif
#if defined (_SEQUENT_)
struct utsname un;
uname(&un);
if (strncmp(un.version, "V2", 2) == 0) {
printf ("i386-sequent-ptx2\n"); exit (0);
}
if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
printf ("i386-sequent-ptx1\n"); exit (0);
}
printf ("i386-sequent-ptx\n"); exit (0);
#endif
#if defined (vax)
#if !defined (ultrix)
#include <sys/param.h>
#if defined (BSD)
#if BSD == 43
printf ("vax-dec-bsd4.3\n"); exit (0);
#else
#if BSD == 199006
printf ("vax-dec-bsd4.3reno\n"); exit (0);
#else
printf ("vax-dec-bsd\n"); exit (0);
#endif
#endif
#else
printf ("vax-dec-bsd\n"); exit (0);
#endif
#else
#if defined(_SIZE_T_) || defined(SIGLOST)
struct utsname un;
uname (&un);
printf ("vax-dec-ultrix%s\n", un.release); exit (0);
#else
printf ("vax-dec-ultrix\n"); exit (0);
#endif
#endif
#endif
#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
#if defined(_SIZE_T_) || defined(SIGLOST)
struct utsname *un;
uname (&un);
printf ("mips-dec-ultrix%s\n", un.release); exit (0);
#else
printf ("mips-dec-ultrix\n"); exit (0);
#endif
#endif
#endif
#if defined (alliant) && defined (i860)
printf ("i860-alliant-bsd\n"); exit (0);
#endif
exit (1);
}
EOF
$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` &&
{ echo "$SYSTEM_NAME"; exit; }
# Apollos put the system type in the environment.
test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
echo "$0: unable to guess system type" >&2
case "$UNAME_MACHINE:$UNAME_SYSTEM" in
@@ -1438,6 +1629,12 @@ copies of config.guess and config.sub with the latest versions from:
https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
and
https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
EOF
year=`echo $timestamp | sed 's,-.*,,'`
# shellcheck disable=SC2003
if test "`expr "\`date +%Y\`" - "$year"`" -lt 3 ; then
cat >&2 <<EOF
If $0 has already been updated, send the following data and any
information you think might be pertinent to config-patches@gnu.org to
@@ -1465,6 +1662,7 @@ UNAME_RELEASE = "$UNAME_RELEASE"
UNAME_SYSTEM = "$UNAME_SYSTEM"
UNAME_VERSION = "$UNAME_VERSION"
EOF
fi
exit 1

2714
config.sub vendored Normal file → Executable file

File diff suppressed because it is too large Load Diff

View File

@@ -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])])
@@ -265,6 +265,7 @@ AC_CHECK_FUNCS_ONCE([
strlcat \
strlcpy \
strndup \
strsignal \
strtok_r \
unsetenv \
vsnprintf \
@@ -464,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])
)
@@ -501,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

View File

@@ -1,3 +1,9 @@
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.

View File

@@ -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

View File

@@ -154,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>"; };
@@ -167,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>"; };
@@ -205,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>"; };
@@ -233,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>"; };
@@ -277,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 */,
@@ -426,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>";
@@ -469,11 +473,11 @@
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 */,
@@ -481,8 +485,8 @@
FA18A63F16CEDE2300132F66 /* ngircd.service */,
FA18A64016CEDE2300132F66 /* ngircd.socket */,
FA322D940CEF7523001761B3 /* ngircd.spec */,
FAA9C8162377186900A04296 /* nglog.sh */,
FA4B08E813E7F91C00765BA3 /* platformtest.sh */,
FA322D960CEF7523001761B3 /* systrace.policy */,
);
name = contrib;
path = ..;
@@ -624,17 +628,16 @@
08FB7793FE84155DC02AAC07 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1000;
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 = "";
@@ -704,6 +707,7 @@
1DEB928708733DD80010E9CD /* Default */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_WEAK = YES;
};
name = Default;
};
@@ -712,14 +716,22 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_WARN_ASSIGN_ENUM = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
@@ -730,6 +742,7 @@
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;
@@ -745,14 +758,23 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_WARN_ASSIGN_ENUM = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
@@ -763,6 +785,7 @@
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;
@@ -779,6 +802,7 @@
FAB0570D105D917F006AF9E2 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_WEAK = YES;
};
name = Debug;
};

View File

@@ -1,6 +1,6 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2017 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,7 +12,7 @@
SUBDIRS = Debian MacOSX
EXTRA_DIST = README \
ngindent \
ngindent.sh \
ngircd-bsd.sh \
ngIRCd-Logo.gif \
ngircd-redhat.init \
@@ -20,8 +20,8 @@ EXTRA_DIST = README \
ngircd.service \
ngircd.socket \
ngircd.spec \
platformtest.sh \
systrace.policy
nglog.sh \
platformtest.sh
maintainer-clean-local:
rm -f Makefile Makefile.in

View File

@@ -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,7 @@ MacOSX/
- Project files for XCode, the "project builder" of Apple Mac OS X.
- de.barton.ngircd.plist[.tmpl]: launchd(8) property list.
ngindent
ngindent.sh
- Script to indent the code of ngIRCd in the "standard way".
ngircd-bsd.sh
@@ -39,8 +39,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).

View File

@@ -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
View 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-

View File

@@ -1,5 +1,5 @@
%define name ngircd
%define version 25
%define version 26~rc1
%define release 1
%define prefix %{_prefix}

28
contrib/nglog.sh Executable file
View 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

View File

@@ -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-

View File

@@ -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.
@@ -882,7 +883,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.
.

View File

@@ -2,7 +2,7 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2019 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.
@@ -35,13 +35,20 @@ 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

View File

@@ -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

View File

@@ -78,12 +78,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 25 19-11-24 goetz Y Y Y Y 3
powerpc/apple/darwin9.8.0 gcc 4.0.1 21 14-01-04 goetz Y Y Y Y 3
powerpc/unknown/linux-gnu gcc 3.3.3 0.8.0 04-05-30 alex Y Y Y Y
powerpc/unknown/openbsd3.6 gcc 2.95.3 0.10.0 06-10-08 alex Y Y N Y
@@ -99,6 +101,7 @@ x86_64/apple/darwin15.6.0 A-clang 8.0 23~38-g455 16-11-04 alex Y Y Y Y 3
x86_64/apple/darwin16.5.0 A-clang 8.1 25~rc1-7-g 18-11-04 alex Y Y Y Y 3
x86_64/apple/darwin17.7.0 A-clang 10.0 25~rc1 18-11-04 alex Y Y Y Y 3
x86_64/apple/darwin18.2.0 A-clang 10.0 25~rc1-11 19-01-23 alex Y Y Y Y 3
x86_64/apple/darwin19.0.0 A-clang 11.0 25~19-g928 19-12-07 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

View File

@@ -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
~~~~~~~~~~~~~~~~~~~~~

View File

@@ -309,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.
#
@@ -385,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 ...

View File

@@ -1,7 +1,7 @@
.\"
.\" ngircd(8) manual page template
.\"
.TH ngircd 8 "Jan 2019" ngIRCd "ngIRCd Manual"
.TH ngircd 8 "May 2020" ngIRCd "ngIRCd Manual"
.SH NAME
ngIRCd \- the "next generation" IRC daemon
.SH SYNOPSIS

View File

@@ -1,7 +1,7 @@
.\"
.\" ngircd.conf(5) manual page template
.\"
.TH ngircd.conf 5 "Jan 2019" ngIRCd "ngIRCd Manual"
.TH ngircd.conf 5 "May 2020" ngIRCd "ngIRCd Manual"
.SH NAME
ngircd.conf \- configuration file of ngIRCd
.SH SYNOPSIS
@@ -347,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.
@@ -432,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
@@ -510,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
@@ -557,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

View File

@@ -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);

View File

@@ -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);

View File

@@ -40,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;
};

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2018 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;
@@ -483,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);
@@ -852,7 +853,7 @@ no_listenports(void)
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;
@@ -902,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 ) {
@@ -1287,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.
@@ -1411,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);
@@ -1551,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");
}
@@ -1805,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;
@@ -1848,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);
@@ -2153,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;
}
@@ -2170,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 ) {
@@ -2177,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) {
@@ -2232,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,
@@ -2246,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! */

View File

@@ -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 operaor 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 */
};

View File

@@ -51,7 +51,7 @@ GLOBAL void
Conn_UpdatePing(CONN_ID Idx)
{
assert(Idx > NONE);
My_Connections[Idx].lastping = time(NULL);
My_Connections[Idx].lastping = My_Connections[Idx].lastdata = time(NULL);
}
/*

View File

@@ -62,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
@@ -266,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. */
@@ -311,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\"!",
@@ -338,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,
@@ -379,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",
@@ -409,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
@@ -510,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));

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2018 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"
@@ -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);
@@ -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,

View File

@@ -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)

View File

@@ -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

View File

@@ -1565,7 +1565,8 @@ IRC_Send_ISUPPORT(CLIENT * Client)
Conf_Network))
return DISCONNECTED;
if (!IRC_WriteStrClient(Client, RPL_ISUPPORT1_MSG, Client_ID(Client),
CHANTYPES, CHANTYPES, Conf_MaxJoins))
Conf_AllowedChannelTypes, Conf_AllowedChannelTypes,
Conf_MaxJoins))
return DISCONNECTED;
return IRC_WriteStrClient(Client, RPL_ISUPPORT2_MSG, Client_ID(Client),
CHANNEL_NAME_LEN - 1, Conf_MaxNickLength - 1,

View File

@@ -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,

View File

@@ -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

View File

@@ -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"

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2019 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2020 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -9,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-2019 Alexander Barton (<alex@barton.de>) and Contributors." );
puts( "Copyright (c)2001-2020 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." );

View File

@@ -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:

View File

@@ -102,7 +102,11 @@ typedef unsigned char bool;
#endif
#undef GLOBAL
#ifdef GLOBAL_INIT
#define GLOBAL
#else
#define GLOBAL extern
#endif
/* SPLint */

View File

@@ -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

View File

@@ -23,13 +23,16 @@ 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\
connect-ssl-cert1-test.e connect-ssl-cert2-test.e
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 +42,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 +50,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 +125,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
View File

@@ -0,0 +1,2 @@
#!/bin/sh
rm ssl/cert.pem ssl/key.pem ssl/dhparams.pem

View 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"
}

View 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"
}

View File

@@ -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

View File

@@ -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 {

View File

@@ -63,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-

View 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
View 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

31
src/testsuite/reload-server.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/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
echo " ok".
exit 0
fi
echo " failure: server ${id} could not be restarted"
exit 1
# -eof-

7
src/testsuite/reload-server3 Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/sh
# ngIRCd Test Suite
[ -z "$srcdir" ] && srcdir=`dirname $0`
${srcdir}/reload-server.sh 3
# -eof-

View File

@@ -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 }

View 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-----

View 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-----

View 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-----

View 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-----

View 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-----

View 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
View 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
View 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
View 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-