Ngircd Versions Save

Free, portable and lightweight Internet Relay Chat server

rel-27

3 weeks ago

More than three years have passed since the last release of ngIRCd – a free, portable and lightweight Internet Relay Chat server for small or private networks – and more than 130 individual patches have accumulated in the Git “master branch” in the meantime. Some are cosmetic, some bring new functionality, others improve the documentation or fix bugs. All in all, it’s more than time for the next “big” release of ngIRCd!

And here it is, ngIRCd release 27! 🎉

The most prominent and possibly breaking(!) change is that ngIRCd now validates SSL/TLS certificates on server-server links. Until now, ngIRCd optionally used encrypted server-server links (when SSLConnect = yes is set in a [Server] block, which is not the default) but never checked and validated any certificates. Oh my! Most probably we never should have released it this way in ngIRCd 13 back in 2008 … I hope you all were aware of this, right? Because you never configured a CA to trust, for example …?

But finally we made it, and ngIRCd now validates SSL/TLS certificates on outgoing server-server links by default and drops(!) connections when the remote certificate is invalid (for example self-signed, expired, not matching the host name, …). Therefore you have to make sure that all relevant certificates are valid (or to disable certificate validation on this connection using the new SSLVerify = false setting in the affected [Server] block, where the remote certificate is not valid and you can not fix this issue).

The original patch for OpenSSL certificate validation on server-links dates back to 2009 and was written by Florian Westphal and extended for GnuTLS in 2014 by Christoph Biedl. But it took us another 10 years to bring it to life … oh my! Many thanks to both Florian and Christoph! (This closes issue #120)

But that’s not all. In addition to the above, the following noteworthy changes are listed in the NEWS file:

  • Add an example filter file for "Fail2Ban": contrib/ngircd-fail2ban.conf (new since RC1).

  • Add support for the “sd_notify” protocol of systemd(8): Periodically “ping” the service manager (every 3 seconds) and set a status message showing current connection statistics which then is included in systemctl status ngircd.service output. In addition, this enables using the systemd(8) watchdog functionality (WatchdogSec) for the ngircd.service unit and allows it to use the notify service type, which results in better status tracking by the service manager.

  • Try to set file descriptor limit to its maximum and show info on startup: The number of possible parallel connections is limited by the file descriptor limit of the process (among other things). Therefore try to upgrade the current “soft” limit to its “hard” maximum (but limited to 100000 instead of “infinite”), and show an information or even warning when the limit is still less than the configured MaxConnections setting. Please note that ngIRCd and its linked libraries (like PAM) need file descriptors not only for incoming and outgoing IRC connections, but for reading files and inter-process communication, too! Therefore the actual connection limit is less(!) than the file descriptor limit!

  • Add a Docker file (contrib/Dockerfile) and corresponding documentation (doc/Container.md) to the project. The resulting container is based on the latest Debian “stable-slim” container and built using a “build container”.

  • No longer use a default built-in value for the IncludeDir directive when a configuration file was explicitly specified on the command line using --config/-f: This way no default include directory is scanned when a possibly non-default configuration file is used which (intentionally) did not specify an IncludeDir directive. So now you can use -f /dev/null for checking all built-in defaults, regardless of any local configuration files in the default drop-in directory (which would have been read in until this change).

  • The server Name in the [Global] section of the configuration file no longer needs to be set: When not set (or empty), ngIRCd now tries to deduce a valid IRC server name from the local host name (“node name”), possibly adding a .host extension when the host name does not contain a dot (.) which is required in an IRC server name (“ID”). This new behavior, with all configuration parameters now being optional, allows running ngIRCd without any configuration file at all.

  • Autodetect support for IPv6 by default: Until now, IPv6 support was disabled by default, which seems a bit outdated in 2024. Note: You still can pass --enable-ipv6/--disable-ipv6 to the ./configure script to forcefully activate or deactivate IPv6 support.

  • Do IDENT requests even when DNS lookups are disabled: Up to now disabling DNS in the configuration disabled IDENT lookups as well (for no good reason). Now you can activate/deactivate DNS lookups and IDENT requests completely separately. Thanks for reporting this, Miniontoby! Closes #291.

  • Allow SSL client-only configurations without keys/certificates: You don’t need to configure certificates/keys as long as you don’t configure SSL-enabled listening ports. This can make sense when you want to only link your local daemon to an uplink server using SSL and only have clients on your local host or in your fully trusted network, where SSL is not required.

  • Respect SSLConnect option for incoming connections and do not accept incoming plain-text (“non SSL”) server connections for servers configured with SSLConnect enabled. This change prevents an authenticated client-server being able to force the server-server to send its password on a plain-text connection when SSL/TLS was intended.

  • Add a new option Autojoin to [Channel] blocks: When it is set, ngIRCd automatically joins all local users to this channel on connect. Note: The users must have permissions to access the channel, otherwise joining them will fail. Thanks Ivan Agarkov for the initial patch!

  • Hide invisible (+i) users on WHOIS <pattern>: Let’s behave like most(?) other IRC daemons (at least ircd2.11) and hide all +i users when WHOIS is used with a pattern. Otherwise privacy of this users is not guaranteed and the +i mode a bit useless … Reported by Cahata on #ngircd, thanks!

  • Make the debug log level (--debug/-d command line option) always available, not only when ./configure’d with --enable-debug: the latter now only enables additional checks (like the tests done using assert(2)) and is signalled by adding +DEBUG to the version “feature string”. This change enables everyone to get even more detailed logging when required.

  • Allow IRC operators to use the WHO command on any channel.

  • Send the NAMES list and channel topic to users “forcefully” joined to a channel using NJOIN, like they joined on their own using JOIN, and streamline the order of NAMES list and channel topic messages. Closes #288.

  • Added a new command line option -y/--syslog, with which logging to syslog can be activated/deactivated separately from running on the console (using --nodaemon) or in the background. Thanks Katherine Peeters for the patch and pull request! Closes #294.

  • Update, enhance and extend our documentation in README.md, INSTALL.md, doc/HowToRelease.txt and the manual pages ngircd(8) and ngircd.conf(5), add a new doc/QuickStart.md document, and convert some more documentation files to Markdown (AUTHORS.md, contrib/README.md, doc/FAQ.md, doc/SSL.md).

And the ChangeLog has even more details and lists all the fixes, minor enhancements and tweaks. Since RC1, the test suite can cope better with non-interactive environments, startup is no longer aborted when setgid()/setuid() fails with EINVAL and the RPL_NAMEREPLY numeric was fixed for secret channels. Thanks a lot to all who run tests and reported bugs!

You can download ngIRCd 27 from the download section on our homepage at https://ngircd.barton.de (mirror: https://ngircd.sourceforge.io). The primary download locations are:

Please report any issues and glitches you find to the GitHub issue tracker (https://github.com/ngircd/ngircd/issues) and use the mailing list ([email protected]) and the #ngircd channel on IRC (irc://irc.barton.de/ngircd) for questions and discussions. Enhancements and additions to the documentation, manual pages and the homepage are welcome as well!

Thanks a lot to all contributors & testers!

Happy IRC'ing! Alex

rel-27-rc1

1 month ago

More than three years have passed since the last release of ngIRCd – a free, portable and lightweight Internet Relay Chat server for small or private networks – and more than 130 individual patches have accumulated in the Git “master branch” in the meantime. Some are cosmetic, some bring new functionality, others improve the documentation or fix bugs. All in all, it’s more than time for the next “big” release of ngIRCd!

And here it is, the 1st release candidate for the upcoming ngIRCd release 27!

The most prominent and possibly breaking(!) change is that ngIRCd now validates SSL/TLS certificates on server-server links. Until now, ngIRCd optionally used encrypted server-server links (when SSLConnect = yes is set in a [Server] block, which is not the default) but never checked and validated any certificates. Oh my! Most probably we never should have released it this way in ngIRCd 13 back in 2008 … I hope you all were aware of this, right? Because you never configured a CA to trust, for example …?

But finally we made it, and ngIRCd now validates SSL/TLS certificates on outgoing server-server links by default and drops(!) connections when the remote certificate is invalid (for example self-signed, expired, not matching the host name, …). Therefore you have to make sure that all relevant certificates are valid (or to disable certificate validation on this connection using the new SSLVerify = false setting in the affected [Server] block, where the remote certificate is not valid and you can not fix this issue).

The original patch for OpenSSL certificate validation on server-links dates back to 2009 and was written by Florian Westphal and extended for GnuTLS in 2014 by Christoph Biedl. But it took us another 10 years to bring it to life … oh my! Many thanks to both Florian and Christoph! (This closes issue #120)

But that’s not all. In addition to the above, the following noteworthy changes are listed in the NEWS file:

  • Add support for the “sd_notify” protocol of systemd(8): Periodically “ping” the service manager (every 3 seconds) and set a status message showing current connection statistics which then is included in systemctl status ngircd.service output. In addition, this enables using the systemd(8) watchdog functionality (WatchdogSec) for the ngircd.service unit and allows it to use the notify service type, which results in better status tracking by the service manager.

  • Try to set file descriptor limit to its maximum and show info on startup: The number of possible parallel connections is limited by the file descriptor limit of the process (among other things). Therefore try to upgrade the current “soft” limit to its “hard” maximum (but limited to 100000 instead of “infinite”), and show an information or even warning when the limit is still less than the configured MaxConnections setting. Please note that ngIRCd and its linked libraries (like PAM) need file descriptors not only for incoming and outgoing IRC connections, but for reading files and inter-process communication, too! Therefore the actual connection limit is less(!) than the file descriptor limit!

  • Add a Docker file (contrib/Dockerfile) and corresponding documentation (doc/Container.md) to the project. The resulting container is based on the latest Debian “stable-slim” container and built using a “build container”.

  • No longer use a default built-in value for the IncludeDir directive when a configuration file was explicitly specified on the command line using --config/-f: This way no default include directory is scanned when a possibly non-default configuration file is used which (intentionally) did not specify an IncludeDir directive. So now you can use -f /dev/null for checking all built-in defaults, regardless of any local configuration files in the default drop-in directory (which would have been read in until this change).

  • The server Name in the [Global] section of the configuration file no longer needs to be set: When not set (or empty), ngIRCd now tries to deduce a valid IRC server name from the local host name (“node name”), possibly adding a .host extension when the host name does not contain a dot (.) which is required in an IRC server name (“ID”). This new behavior, with all configuration parameters now being optional, allows running ngIRCd without any configuration file at all.

  • Autodetect support for IPv6 by default: Until now, IPv6 support was disabled by default, which seems a bit outdated in 2024. Note: You still can pass --enable-ipv6/--disable-ipv6 to the ./configure script to forcefully activate or deactivate IPv6 support.

  • Do IDENT requests even when DNS lookups are disabled: Up to now disabling DNS in the configuration disabled IDENT lookups as well (for no good reason). Now you can activate/deactivate DNS lookups and IDENT requests completely separately. Thanks for reporting this, Miniontoby! Closes #291.

  • Allow SSL client-only configurations without keys/certificates: You don’t need to configure certificates/keys as long as you don’t configure SSL-enabled listening ports. This can make sense when you want to only link your local daemon to an uplink server using SSL and only have clients on your local host or in your fully trusted network, where SSL is not required.

  • Respect SSLConnect option for incoming connections and do not accept incoming plain-text (“non SSL”) server connections for servers configured with SSLConnect enabled. This change prevents an authenticated client-server being able to force the server-server to send its password on a plain-text connection when SSL/TLS was intended.

  • Add a new option Autojoin to [Channel] blocks: When it is set, ngIRCd automatically joins all local users to this channel on connect. Note: The users must have permissions to access the channel, otherwise joining them will fail. Thanks Ivan Agarkov for the initial patch!

  • Hide invisible (+i) users on WHOIS <pattern>: Let’s behave like most(?) other IRC daemons (at least ircd2.11) and hide all +i users when WHOIS is used with a pattern. Otherwise privacy of this users is not guaranteed and the +i mode a bit useless … Reported by Cahata on #ngircd, thanks!

  • Make the debug log level (--debug/-d command line option) always available, not only when ./configure’d with --enable-debug: the latter now only enables additional checks (like the tests done using assert(2)) and is signalled by adding +DEBUG to the version “feature string”. This change enables everyone to get even more detailed logging when required.

  • Allow IRC operators to use the WHO command on any channel.

  • Send the NAMES list and channel topic to users “forcefully” joined to a channel using NJOIN, like they joined on their own using JOIN, and streamline the order of NAMES list and channel topic messages. Closes #288.

  • Added a new command line option -y/--syslog, with which logging to syslog can be activated/deactivated separately from running on the console (using --nodaemon) or in the background. Thanks Katherine Peeters for the patch and pull request! Closes #294.

  • Update, enhance and extend our documentation in README.md, INSTALL.md, doc/HowToRelease.txt and the manual pages ngircd(8) and ngircd.conf(5), add a new doc/QuickStart.md document, and convert some more documentation files to Markdown (AUTHORS.md, contrib/README.md, doc/FAQ.md, doc/SSL.md).

And the ChangeLog has even more details and lists all the fixes, minor enhancements and tweaks.

You can download ngIRCd 27~rc1 from the download section on our homepage at https://ngircd.barton.de (mirror: https://ngircd.sourceforge.io). The primary download locations are:

It would be great if as many people as possible try to build this release candidate code on as many platforms as possible!

Please report any issues and glitches you find to the GitHub issue tracker (https://github.com/ngircd/ngircd/issues), the mailing list ([email protected]), or to the #ngircd channel on IRC: irc://irc.barton.de/ngircd. Enhancements and additions to the documentation, manual pages and the homepage are welcome as well!

The easiest way to test ngIRCd is to run the ./contrib/platformtest.sh script which is included in the distribution archives, for example like this:

$ curl -#LO "https://ngircd.barton.de/pub/ngircd/ngircd-27~rc1.tar.gz"
$ tar xzf "ngircd-27~rc1.tar.gz"
$ cd ngircd-27~rc1
$ ./contrib/platformtest.sh

This will take a few minutes (4-5) as our test suite takes some time because of the “penalties” that the test clients have to cope with (the compile run itself is quite fast), and should result in a nice summary like this:

                                the executable works ("runs") as expected --+
                                  tests run successfully ("make check") --+ |
                                             ngIRCd compiles ("make") --+ | |
                                                  ./configure works --+ | | |
                                                                      | | | |
Platform                    Compiler     ngIRCd     Date     Tester   C M T R *
--------------------------- ------------ ---------- -------- -------- - - - - -
x86_64/pc/linux-gnu         gcc 12.2.0   26.1~122-g 24-03-27 alex     Y Y Y Y 1

If you like, and especially if you are on a bit more “special” system (non-amd64, non-arm64, non-Linux?), you can say “Hello!” in the irc://irc.barton.de/ngircd IRC channel and post this result line there: then we can include it in the doc/Platforms.txt file.

Thanks a lot to all contributors & testers!

Happy testing and have fun!

rel-26.1

3 years ago

This is ngIRCd 26.1, the next release of ngIRCd, the free, portable and lightweight Internet Relay Chat server for small or private networks.

Version 26.1 is a bug fix release only, without new features. If you aren't affected by any of the fixed issues, there is no need for a timely upgrade if you are already running ngIRCd 26.

The ChangeLog file lists the following changes:

  • Fix a "format string" compiler warning (detected on OpenBSD).

  • No longer set AI_ADDRCONFIG when resolving host names, even when it exists: with this option set, on an IPv6-only host, we prevent 127.0.0.1 to get translated properly, even when the loopback interface has this address configured! And as the test suite uses 127.0.0.1, it was broken on IPv6-only hosts. The drawback is that the resolver possibly returns more addresses now, even of an unsupported/not connected address family; but this shouldn't do much harm in practice, as ngIRCd iterates over all returned addresses while trying to establish an outgoing connection. Closes #281.

  • Revert "Show allowed channel types in ISUPPORT(005) numeric only", which was introduced in 26~rc1: This lead to some IRC clients assuming "oh, no channel prefix characters at all, so no channels at all, so no PRIVMSG can go to any channel" when "AllowedChannelTypes" was set to the empty string ("") -- which is not the case when there are pre-defined channels set up or other servers still have channels! So "allowed channel types" != "supported channel types", and we always have to list all supported ones in the ISUPPORT(005) numeric! Closes #285.

  • Test suite: Wait 2 seconds after reloading the daemon, which is required because on reload, all listening ports are closed, configuration updated, and then opened again. This lead to subsequent tests running while the daemon isn't listening on any ports, and that's why some tests could fail. Closes #280.

  • platformtest.sh: Try to mangle CLang name more intelligently.

  • Documentation: Fixed URLs of Atheme IRC services, updated all mentions from CVS to Git, and updated Platforms.txt -- Oh, and it is 2021 now! ;-)

rel-26

3 years ago

This is ngIRCd 26, the next major release of ngIRCd, the free, portable and lightweight Internet Relay Chat server for small or private networks.

This release contains all fixes and enhancements since ngIRCd 25, please see the release notes for ngIRCd 26~rc1 and ngIRCd 26~rc2 – or the ChangeLog file – for a detailed list of all changes.

The NEWS file lists the following new features since ngIRCd 25:

  • Add AppStream metadata file (contrib/de.barton.ngircd.metainfo.xml).

  • 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 [email protected]!

  • 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 [email protected]! 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.

rel-26-rc2

3 years ago

ngIRCd 26~rc2 (2020-06-11)

The ChangeLog lists the following changes since ngIRCd 26~rc1:

  • Add AppStream metadata file (contrib/de.barton.ngircd.metainfo.xml).

  • Don't send invalid CHANINFO commands when a channel has mode +k set but no key is known to the server. This can happen with a misconfigured predefined channel, for example, and looked like this:

    CHANINFO #test +Pk  0 :
    

    Note the unset key represented by the two spaces. Fix this by sending a * in this case and update the CHANINFO documentation, too.

  • ngircd.spec: Fix names of README.md and INSTALL.md, add .md extension.

  • Update description texts in the README.md file, the RPM and Debian package files and the manual page: bring them in line with the updated homepage.

  • Server-Server protocol: Fix use-after-free when unregistering a directly connected server sending a SQUIT for itself.

  • Server-Server protocol: Detect bogus SERVER commands lacking a prefix. Thanks Hilko Bengen (hillu) for finding & reporting this as well for the patch & pull request (even if fixed differently). Closes #275.

  • Fix the PING-PONG logic: In ngIRCd 26~rc1 this was completely broken (while trying to fix timeouts during server handshakes in bigger networks): the daemon never disconnected any stale peers but kept sending out PINGs over and over again ...

  • Test suite: Add missing files needed to test SSL support to EXTRA_DIST, so that they are included in distribution archives: in rc1, "make check" fails when using sources from an archive and enabling SSL support. Thanks to Hilko Bengen [email protected] for the patch!

rel-26-rc1

4 years ago

The ChangeLog lists the following changes:

  • 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) [email protected]! 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 [email protected]!

  • 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 [email protected] 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 [email protected] for the patch!

  • Fix builds using GCC option -fno-common, which is the default starting with GCC 10. Thanks to Michi [email protected] 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 [email protected]! 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 [email protected] 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 [email protected] and Christoph Biedl [email protected]. 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.

rel-25

5 years ago

The ChangeLog lists the following changes since release 25~rc1:

  • Fix documentation of MotdPhrase length, which actually is 126 characters: update sample configuration file as well as the man page. Thanks to shankari [email protected]. Closes #254.
  • Implement new configuration option MaxPenaltyTime, which configures the maximum penalty time increase in seconds, per penalty event. Set to -1 for no limit (the default), 0 to disable penalties altogether. ngIRCd doesn't use penalty increases higher than 2 seconds during normal operation, so values higher than 1 rarely make sense. Disabling (or reducing) penalties can greatly speed up "make check" runs for example, see below, but are mostly a debugging feature and normally not meant to be used on production systems! Closes #249 and #251. Some example timings running "make check" from my macOS workstation:
    • MaxPenaltyTime not set: 4:41,79s
    • MaxPenaltyTime = 1: 3:14,71s
    • MaxPenaltyTime = 0: 25,46s
  • Fix compilation without deprecated OpenSSL APIs. Thanks to Rosen Penev [email protected] for the patch! Closes #252.
  • Update Xcode project for latest Xcode version (10.0)
  • Fix some compiler warnings of Apple Xcode/Clang
  • Allow a 5th parameter in WEBIRC. Thanks to "ItsOnlyBinary". Closes #247.
  • Update some more documentation files and source code comments.
  • Platforms.txt: Add and update systems.

All changes of ngIRCd 25~rc1 are of course included as well :-) Most notably, citing the NEWS file:

  • Only send TOPIC updates to a channel when the topic actually changed: This prevents the channel from becoming flooded by unecessary TOPIC update messages, that can happen when IRC services try to enforce a certain topic but which is already set (at least on the local server), for example. Therefore still forward it to all servers, but don't inform local clients (still update setter and timestamp information, though!).
  • Update Xcode project for latest Xcode version (9.2). This includes adding missing and deleting obsolete file references.
  • Handle user mode "C" ("Only users that share a channel are allowed to send messages") like user mode "b" ("block private messages and notices"): allow messages from servers, services, and IRC Operators, too. Change proposed by "wowaname" back in 2015 in #ngircd, thanks!
  • Allow IRC Ops and remote servers to KILL service clients: such clients behave like regular users, therefore IRC operators and servers should be able to KILL them: for example to resolve nick collisions. Closes #242.

rel-25-rc1

5 years ago

The ChangeLog lists the following changes:

  • Update config.guess (2018-03-08) and config.sub (2018-03-08) files.
  • Correctly retry to establish an outgoing connections when forking of the resolver sub-process failed (for example because of lack of free memory). Until now, such a connection was never retried once this error was hit. Thanks to Robert Obermeier for reporting this bug! Closes #243.
  • Fix a "use after free" bug which can be triggered on a newly established connection when the daemon handles an ERROR command received from the peer during client login. Thanks a lot to Joseph Bisch [email protected] for discovering and reporting this issue!
  • Only send TOPIC updates to a channel when the topic actually changed: This prevents the channel from becoming flooded by unnecessary TOPIC update messages, that can happen when IRC services try to enforce a certain topic but which is already set (at least on the local server), for example. Therefore still forward it to all servers, but don't inform local clients (still update setter and timestamp information, though).
  • Update Xcode project for latest Xcode version (9.2). This includes adding missing and deleting obsolete file references.
  • Handle user mode "C" ("Only users that share a channel are allowed to send messages") like user mode "b" ("block private messages and notices"): allow messages from servers, services, and IRC Operators, too. Change proposed by "wowaname" back in 2015 in #ngircd, thanks!
  • Fix some compiler warnings.
  • Add contrib/ngircd.logcheck: Some sample logcheck(8) rules.
  • Allow IRC Ops and remote servers to KILL service clients: such clients behave like regular users, therefore IRC operators and servers should be able to KILL them: for example to resolve nick collisions. Closes #242.
  • Don't forward KILLs to other servers if they've been blocked locally: This prevents clients from killing IRC services, for example. Closes #238 and #239.
  • Fix a cross-compiler issue related to the Get_Error() function. Closes #240 and #241.
  • Update doc/Services.txt, enhance configuration examples.

rel-24

7 years ago

ngIRCd stable release with the following NEWS (see the ChangeLog and the Git history for a more in-depth list of changes):

  • Log privilege violations and failed OPER request with log level "error" and send it to the "&SERVER" channel, too.
  • Immediately shut down connection when receiving an "ERROR" command, don't wait for the peer to close the connection. This allows the daemon to forward the received "ERROR" message in the network, instead of the very generic "client closed connection" message.
  • Explicitly forbid remote servers to modify "x-lines" (G-LINES) when the "AllowRemoteOper" configuration option isn't set, even when the command seems to originate from the remote server itself: this prevents GLINE's to become set during server handshake in this case (what wouldn't be possible during regular runtime when a remote IRC Op sends the command) and what can't be undone by IRC Ops later on (because of the missing "AllowRemoteOper" option) ...
  • Update Xcode project for latest Xcode version (8.0), and fix "duplicate symbols" error messages when building (linking) the binary.
  • Add "Documentation" variables to systemd configuration files.
  • Make sure that SYSCONFDIR is always set, which can be handy when using source code linters when ./configure hasn't been run already.
  • Add the new "PAMServiceName" configuration option to specify the name used as PAM service name. This setting allows to run multiple ngIRCd instances with different PAM configurations for each instance. Thanks to Christian Aistleitner [email protected] for the patch, closes #226.
  • Add an ".editorconfig" file to the project.
  • Limit the number of message target, and suppress duplicates: This prevents an user from flooding the server using commands like this: "PRIVMSG nick1,nick1,nick1,...". Duplicate targets are suppressed silently (channels and clients). In addition, the maximum number of targets per PRIVMSG, NOTICE, ... command are limited to MAX_HNDL_TARGETS (25). If there are more, the daemon sends the new 407 (ERR_TOOMANYTARGETS_MSG) numeric, containing the first target that hasn't been handled any more. Closes #187.
  • Make contrib/platformtest.sh script more portable, and only show "runs=Y" when the test suite really has been passed successfully.

rel-24-rc1

7 years ago

The ChangeLog lists the following changes:

  • Log privilege violations and failed OPER request with log level "error" and send it to the "&SERVER" channel, too.
  • Immediately shut down connection when receiving an "ERROR" command, don't wait for the peer to close the connection. This allows the daemon to forward the received "ERROR" message in the network, instead of the very generic "client closed connection" message.
  • Fix sending of entry duration (no negative values!) when synchronizing "x-lines" (G-LINES).
  • List expiration (G-LINES): use same log level as when setting, and log this event to the &SERVER channel, too.
  • Explicitly forbid remote servers to modify "x-lines" (G-LINES) when the "AllowRemoteOper" configuration option isn't set, even when the command seems to originate from the remote server itself: this prevents GLINE's to become set during server handshake in this case (what wouldn't be possible during regular runtime when a remote IRC Op sends the command) and what can't be undone by IRC Ops later on (because of the missing "AllowRemoteOper" option) ...
  • Make scripts and init-files in ./contrib executable.
  • Fix building ngIRCd with OpenSSL 1.1. Thanks to Christoph Biedl [email protected] for the patch!
  • Fix code indentation warnings of gcc 6.2.
  • Update config.guess (2016-04-02) and config.sub (2016-03-30) files.
  • Fix warnings of the "shellcheck" linter in autogen.sh, contrib/ngindent and contrib/platformtest.sh.
  • Update Xcode project for latest Xcode version (8.0), and fix "duplicate symbols" error messages when building (linking) the binary.
  • Add "Documentation" variables to systemd configuration files.
  • Make sure that SYSCONFDIR is always set, which can be handy when using source code linters when ./configure hasn't been run already.
  • Add the new "PAMServiceName" configuration option to specify the name used as PAM service name. This setting allows to run multiple ngIRCd instances with different PAM configurations for each instance. Thanks to Christian Aistleitner [email protected] for the patch, closes #226.
  • Add an ".editorconfig" file to the project.
  • Travis-CI: use "container-based infrastructure".
  • Limit the number of message targets, and suppress duplicates: This prevents an user from flooding the server using commands like this: PRIVMSG nick1,nick1,nick1,.... Duplicate targets are suppressed silently (channels and clients). In addition, the maximum number of targets per PRIVMSG, NOTICE, ... command are limited to MAX_HNDL_TARGETS (25). If there are more, the daemon sends the new 407 ERR_TOOMANYTARGETS_MSG) numeric, containing the first target that hasn't been handled any more. Closes #187.
  • Test suite: Add new test for server-server logins.
  • contrib/ngindent: Fix shebang line.
  • Make contrib/platformtest.sh script more portable, and only show "runs=Y" when the test suite really has been passed successfully.
  • Code cleanup in the NJON handler and the function killing clients as well as the function sending messages to a "mask" (cleaner code, more fault tolerant, better code comments).
  • Update and enhance documentation: README file, doc/Platforms.txt, doc/Modes.txt, doc/Commands.txt, doc/PAM.txt.
  • Fix NJOIN not propagating "half ops" status: ngIRCd tested for the wrong prefix of "half ops" when processing NJOIN commands and therefore never classified a remote user as "half op". Thanks to wowaname for pointing this out on #ngircd!