]> arthur.barton.de Git - ngircd-alex.git/blobdiff - ChangeLog
ngIRCd Release 27
[ngircd-alex.git] / ChangeLog
index b384b380afb5efe882e4f1d8eed08646ca8cfad1..0744e2502e6d2d33a369a5906ebcc58988a9368f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
                      ngIRCd - Next Generation IRC Server
                            http://ngircd.barton.de/
 
                      ngIRCd - Next Generation IRC Server
                            http://ngircd.barton.de/
 
-               (c)2001-2020 Alexander Barton and Contributors.
+               (c)2001-2024 Alexander Barton and Contributors.
                ngIRCd is free software and published under the
                    terms of the GNU General Public License.
 
                                -- ChangeLog --
 
                ngIRCd is free software and published under the
                    terms of the GNU General Public License.
 
                                -- ChangeLog --
 
-ngIRCd 26
-
-  ngIRCd 26~rc1
+ngIRCd 27 (2024-04-26)
+
+  - Update ChangeLog, NEWS, AUTHORS.md & doc/Platforms.txt for ngIRCd 27.
+  - Clarify in the sample configuration file and the ngircd.conf(5) manual
+    page that the "CAFile" option is unset by default.
+  - Fix channel symbol returned in the RPL_NAMREPLY(353) numeric of NAMES
+    commands for secret (mode +s) channels: this should be "@", not "=".
+    Thanks Val Lorentz <progval+git@progval.net> for the patch!
+    Closes #313.
+  - Add an example filter file for "Fail2Ban": contrib/ngircd-fail2ban.conf.
+  - Don't abort startup when setgid/setuid() fails with EINVAL: Both setgid(2)
+    as well as setuid(2) can fail with EINVAL in addition to EPERM, their
+    manual pages state "EINVAL: The user/group ID specified in uid/gid is not
+    valid in this user namespace ". So not only treat EPERM as an "acceptable
+    error" and continue with logging the error, but do the same for EINVAL.
+    This was triggered by the Void Linux xbps-uunshare(1) tool used for
+    building "XBPS source packages" and reported by luca in #ngircd. Thanks!
+  - Test suite: Don't use "pgrep -u" when LOGNAME and USER are not set
+    Thanks for reporting this on IRC, luca!
+
+  ngIRCd 27~rc1 (2024-04-13)
+  - Validate certificates on server links. Up to now, ngIRCd optionally used
+    SSL/TLS encrypted server-server links but never checked and validated any
+    certificates. Now ngIRCd 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 dates back to 2009 and was written by Florian
+    Westphal and was 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!
+    Closes #120.
+  - 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!
+  - Update and fix the logcheck(8) rules file.
+  - METADATA: Fix unsetting the "cloakhost" hostname, which did not result in
+    the original hostname being restored, but actually resulted in an empty
+    string being used as the client hostname -- which is a protocol violation.
+  - Update the "rpm" make target to use the rpmbuild(8) command.
+  - 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".
+  - Remove outdated, unsupported and broken support for splint(1).
+  - Don't show the default config file name on config errors: The configuration
+    can be set in drop-in files in the include directory, too, so it is not
+    clear in which file it is actually missing.
+  - 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).
+  - No longer log channel keys ("passwords") for predefined channels.
+  - 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.
+  - Silence some compiler warnings.
+  - autogen.sh: Prefer automake 1.11 over other releases because this is the
+    last release supporting "de-ANSI-fication" using the included ansi2knr tool.
+    And because we _want_ to support old K&R platforms, we try hard to use this
+    release of automake when available to generate our build system.
+    Note: This is only relevant for you if you are building from Git sources.
+  - 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.
+  - Update config.guess (2023-08-22) and config.sub (2023-09-19) files.
+  - Fix Channel Admins being able to to set Channel Owner status! "Sarah"
+    reported this back in April 2021 and proposed a patch, thanks a lot!
+  - Test suite: Update for OpenSSL 3.x, some command outputs changed, clean up
+    shell scripts and make the getpid.sh script more robust.
+  - 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.
+  - Remove the unmaintained contrib/MacOSX/ folder: this includes the Xcode
+    project as well as the outdated macOS "Package Maker" configuration. The
+    sample launchd(8) configuration properties list file was moved to
+    "contrib/de.barton.ngircd.plist" and kept.
+  - Fix showing the "Ident" option in "--configtest" output which was never
+    shown because of a coding error. Whoops!
+  - Change GnuTLS "slot handling" messages to debug level: Those messages are
+    about an internal implementation detail, not relevant for an administrator
+    of ngIRCd.
+  - Enlarge buffer for log messages: For example, SSL/TLS certificate
+    information can easily get longer than 256 characters. So enlarge the log
+    buffer to 1 KB to avoid cutting off relevant information.
+  - 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.
+  - Always try to close a connection with errors immediately, but try hard
+    to avoid too much recursion. Without this patch, an outgoing server
+    connection could get stuck in an "endless" state trying to write out data
+    over and over again.
+  - Add "hopm.service" to "Wants" and "Before" dependencies in the sample
+    systemd unit file (Hopm is the successor of Bopm).
+  - Update Debian package configuration using current "dh_make", package
+    dependencies and build rules. And no longer build 3 different versions,
+    only build "ngircd" which now includes support for IDENT, PAM (disabled in
+    the ngircd.conf installed by the package), SSL (OpenSSL), ZLib and IPv6.
+  - Return ERR_NOTEXTTOSEND on empty PRIVMSG content, which matches the
+    behavior of other servers.
+  - 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 <i_agarkov@wargaming.net> 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!
+  - Update the final "closing connection" message: Add some more information
+    like nick name, user name, host name and bring it in line with some other
+    implementations (at least ircd2.11 and Hybrid).
+  - Fix RPL_INVITING message: All numeric replies must originate from an IRC
+    server, never from a client. Thanks "tommyrot" for reporting this!
+    Closes #307.
+  - Enhance some log messages, for example for errors when accepting new
+    connections.
+  - 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.
+  - Always report an error when a parameter is missing in a channel "MODE +k"
+    or "MODE +l" command, and better validate their parameters: return the new
+    numeric ERR_INVALIDMODEPARAM_MSG(696) on errors.
+    Thanks Val Lorentz for reporting this!
+    Closes #290.
+  - Allow IRC Operators to use the WHO command on any channel.
+  - Add configuration for "ngIRCd CI" GitHub Action, no longer use Travis-CI.
+  - 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.
+  - Fix (invalid) error messages when setting modes on local channels which
+    are defined in the configuration file.
+  - Fix handling of G-Lines/K-Lines with cloaked host names.
+  - Streamline logging of debug messages.
+  - 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.
+  - Fix a possible race condition while introducing new clients in the network.
+  - 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).
+
+ngIRCd 26.1 (2021-01-02)
+
+  - Fix a "format string" compiler warning (detected on OpenBSD).
+  - No longer set "AI_ADDRCONFIG" when resolving host names, even when it
+    exists: with this option set, on an IPv6-only host, we prevent 127.0.0.1
+    to get translated properly, even when the loopback interface has this
+    address configured! And as the test suite uses 127.0.0.1, it was broken
+    on IPv6-only hosts.
+    The drawback is that the resolver possibly returns more addresses now,
+    even of an unsupported/not connected address family; but this shouldn't
+    do much harm in practice, as ngIRCd iterates over all returned addresses
+    while trying to establish an outgoing connection.
+    Closes #281.
+  - Revert "Show allowed channel types in ISUPPORT(005) numeric only", which
+    was introduced in 26~rc1: This lead to some IRC clients assuming "oh, no
+    channel prefix characters at all, so no channels at all, so no PRIVMSG can
+    go to any channel" when "AllowedChannelTypes" was set to the empty string
+    ("") -- which is not the case when there are pre-defined channel set up or
+    other servers still having channels!
+    So "allowed channel types" != "supported channel types", and we always have
+    to list all supported ones in the ISUPPORT(005) numeric!
+    Closes #285.
+  - Test suite: Wait 2 seconds after reloading the daemon, which is required
+    because on reload, all listening ports are closed, configuration updated,
+    and then opened again. This lead to subsequent tests running while the
+    daemon isn't listening on any ports, and that's why some tests could fail.
+    Closes #280.
+  - platformtest.sh: Try to mangle CLang name more intelligently.
+  - Documentation: Fixed URLs of Atheme IRC services, updated all mentions
+    from CVS to Git, and updated Platforms.txt -- Oh, and it is 2021 now! ;-)
+
+ngIRCd 26 (2020-06-20)
+
+  ngIRCd 26~rc2 (2020-06-11)
+  - Add AppStream metadata file (contrib/de.barton.ngircd.metainfo.xml).
+  - Don't send invalid CHANINFO commands when a channel has mode +k set but no
+    key is known to the server. This can happen with a misconfigured predefined
+    channel, for example, and looked like this: "CHANINFO #test +Pk  0 :" --
+    note the unset key represented by the two spaces. Fix this by sending a
+    "*" in this case and update the CHANINFO documentation, too.
+  - ngircd.spec: Fix names of README.md and INSTALL.md, add ".md" extension.
+  - Update description texts in the README.md file, the RPM and Debian package
+    files and the manual page: bring them in line with the updated homepage.
+  - Server-Server protocol: Fix use-after-free when unregistering a directly
+    connected server sending a SQUIT for itself.
+  - Server-Server protocol: Detect bogus SERVER commands lacking a prefix.
+    Thanks Hilko Bengen (hillu) for finding & reporting this as well for the
+    patch & pull request (even if fixed differently).
+    Closes #275.
+  - Fix the PING-PONG logic: In ngIRCd 26~rc1 this was completely broken (while
+    trying to fix timeouts during server handshakes in bigger networks): the
+    daemon never disconnected any stale peers but kept sending out PINGs over
+    and over again ...
+  - Test suite: Add missing files needed to test SSL support to "EXTRA_DIST",
+    so that they are included in distribution archives: in rc1, "make check"
+    fails when using sources from an archive and enabling SSL support.
+    Thanks to Hilko Bengen <bengen@hilluzination.de> for the patch!
+
+  ngIRCd 26~rc1 (2020-05-10)
+  - Tweak & update doc/HowToRelease.txt, .mailmap and AUTHORS files.
+  - Allow up to 512 characters per line in MOTD and help text files (but keep
+    in mind that lines can't get that long, because they have to be prefixed
+    before being sent to the client). But this allows for more fancy MOTDs :-)
+    Closes #271.
+  - Show the actually allowed channel types in the ISUPPORT(005) numeric which
+    are configured by the "AllowedChannelTypes" configuration variable.
+    Closes #273.
+  - Handle commands in the read buffer before reading more data and don't wait
+    for the network in this case: If there are more bytes in the read buffer
+    already than a single valid IRC command can get long (513 bytes), wait for
+    this/those command(s) to be handled first and don't try to read even more
+    data from the network (which most probably would overflow the read buffer
+    of this connection soon).
+  - Update Travis-CI configuration, "sudo" is deprecated.
+  - Log G-/K-Line changes only when not initiated by a server: this prevents
+    the log from becoming spammed during "net bursts".
+  - Update test suite to include SSL tests, including checking for reloading
+    certificates during runtime.
+  - Makefile.am: Replace "make" with "${MAKE}". This fixes warnings like this:
+    "warning: jobserver unavailable: using -j1. Add `+' to parent make rule."
+    Thanks to Sam James (sam_c) <sam@cmpct.info>!
+    Closes #270.
+  - Add support for GnuTLS certificate reload, which is quite handy when using
+    Let's Encrypt, for example. Until now this was only supported when linked
+    with OpenSSL. Thanks a lot, Hilko Bengen <bengen@hilluzination.de>!
   - Remove deprecated legacy configuration options and related functions that
     have been marked for removal for quite some time:
     - PredefChannelsOnly (v22)
   - Remove deprecated legacy configuration options and related functions that
     have been marked for removal for quite some time:
     - PredefChannelsOnly (v22)
@@ -18,11 +284,6 @@ ngIRCd 26
     - NoXXX (v19)
     - Old '[GLOBAL]' section handling (v19)
     Thanks to Michi <michi+ngircd@dataswamp.org> for the patch!
     - NoXXX (v19)
     - Old '[GLOBAL]' section handling (v19)
     Thanks to Michi <michi+ngircd@dataswamp.org> for the patch!
-  - 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. Thanks to Michi <michi+ngircd@dataswamp.org>!
   - 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
   - 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
@@ -45,7 +306,7 @@ ngIRCd 26
     "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).
     "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",
+    This new behavior 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.
     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.
@@ -61,7 +322,8 @@ ngIRCd 26
     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
     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).
+    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).
     Closes #228.
   - Enlarge buffers of info texts to 128 bytes. This includes:
     - "Real name" of a client (4th filed of the USER command).
@@ -222,7 +484,7 @@ ngIRCd 24 (2017-01-20)
   - 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.
   - 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
+  - Code cleanup in the NJOIN 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,
     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,