about summary refs log tree commit diff
AgeCommit message (Collapse)Author
2024-03-23S2S-TLS/GnuTLS: Update SSL code for GnuTLS certificate reloadingAlexander Barton
Without this, the S2S-TLS-Patch not even compiles with GnuTLS because of the "new" GnuTLS certificate reload support implemented in commit eead4a63 ("x509_cred_slot").
2024-03-23S2S-TLS: MAX_CERT_CHAIN_LENGTH is only used by OpenSSLAlexander Barton
2024-03-23S2S-TLS: Fix formatting and sort new SSL options in ngircd.conf manual pageAlexander Barton
2024-03-23S2S-TLS/OpenSSL: Streamline loggingAlexander Barton
This includes simplifying cb_connserver_login_ssl() a bit, we do not have to code for invalid state which was ruled out by an assert() and therefore can get rid of the goto altogether (and don't log the same error twice with different messages).
2024-03-23S2S-TLS/OpenSSL: Postpone verification of TLS session right before server ↵Alexander Barton
handshake The verify callback in OpenSSL is called pretty early, and at that time it is not possible yet to check which connection it belongs to, and some connections may have relaxed requirements. So always return success in the Verify_openssl() callback, and postpone validation of the TLS session until starting the server handshake in cb_connserver_login_ssl(), when we know which server this connection belongs to and which options (like "SSLVerify") are in effect. The code doing this was already present in cb_connserver_login_ssl(), but this patch adds a more prominent comment to the function.
2024-03-23S2S-TLS/OpenSSL: Fix handling of certificate information for incoming ↵Alexander Barton
connections Show proper certificate information for incoming connections, too, and not "peer did not present a certificate", regardless if the client sent a certificate or not. And free the client certificate structure "peer_cert" on incoming connections as well!
2024-03-23S2S-TLS/OpenSSL: Set the verification flags only onceAlexander Barton
Set the verification flags in the ConnSSL_SetVerifyProperties_openssl function only, don't override them in ConnSSL_InitLibrary() afterwards. No functional changes, now ConnSSL_SetVerifyProperties_openssl() sets exactly the parameters which ConnSSL_InitLibrary() always overwrote ...
2024-03-23S2S-TLS/OpenSSL: Always setup host name verificationAlexander Barton
Setup host name verification even when the "SSLVerify" option is disabled, because even then the peer can present a valid certificate and validation would always(!) fail because of the missing host name verification setup.
2024-03-23S2S-TLS: Remove leftover debug messagesAlexander Barton
2024-03-23S2S-TLS: Add missing CAFile and CRLFile options to "configtest" outputAlexander Barton
2024-03-23Support for server certificate validation on server links [S2S-TLS]Christoph Biedl
This patch provides code to validate the server certificate in server links, defeating nasty man-in-the-middle attacks on server links. Features: - Check whether the certificate is signed by a trusted certificate authority (CA). - Check the host name, including wildcard certificates and Subject Alternative Names. - Optionally check against a certificate revocation list (CRL). - Implementation for both OpenSSL and GnuTLS linkage. Left for another day: - Parameterize the TLS parameter of an outbound connection. Currently, it's hardcoded to disable all versions before TLSv1.1. - Using certificate as CA-certificate. They work for GnuTLS only but perhaps this should rather raise an error there, too. - Optional OCSP checking. - Checking client certificates. Code is there but this first needs some consideration about the use cases. This could replace all other authentication methods, for both client-server and server-server connections. This patch is based on a patch by Florian Westphal from 2009, which implemented this for OpenSSL only: From: Florian Westphal <fw@strlen.de> Date: Mon, 18 May 2009 00:29:02 +0200 Subject: SSL/TLS: Add initial certificate support to OpenSSL backend Commit message modified by Alex Barton. Closes #120, "Server links using TLS/SSL need certificate validation". Supersedes PR #8, "Options for verifying and requiring SSL client certificates", which had (incomplete?) code for OpenSSL, no GnuTLS.
2024-03-23Streamline README.md & INSTALL.md filesAlexander Barton
- Tweak some paragraphs and bring others more in line with texts on the homepage ... - Try to not duplicate information: - Configuration is explained in doc/QuickStart.md; - command line parameters are already better described in the ngircd(8) manual page. - Move all pointers to documentation to the README.md file, which is directly shown in GitHub when browsing the repository, for example.
2024-03-23Bring manual page more in line with README.md and homepageAlexander Barton
2024-03-17QuickStart.md: Tweak the text a bit ...Alexander Barton
2024-03-17INSTALL.md: Add info for macOS systemsAlexander Barton
2024-03-17METATADA: Fix unsetting "cloakhost"Alexander Barton
Correctly re-generate the "cloaked hostname" when removing the "cloakhost" using an empty string by passing down NULL instead of the empty string, which results in protocol violations (for example on WHOIS).
2024-03-17Update the "rpm" make target to use rpmbuild(8)Alexander Barton
2024-03-17Add a Dockerfile and documentation to the projectAlexander Barton
2024-02-10Streamline the "testsuite" and "srcdoc" make targetsAlexander Barton
2024-02-10Remove outdated, unsupported and broken support for splint(1)Alexander Barton
2024-02-10Git: Streamline and simplify .gitignore fileAlexander Barton
2024-02-10Convert contrib/README to MarkdownAlexander Barton
2024-02-05Doxygen: Update the footer linksAlexander Barton
2024-02-05testsuite: Pass -nameopt to openssl s_client.Sebastian Andrzej Siewior
The default value for the -nameopt option changed in OpenSSL 3.2 from `oneline' to `utf8'. The `oneline' option also included a space around the fields which is not the case for `utf8'. This means that CN = my.first.domain.tld changed to CN=my.first.domain.tld and is now longer recognized, leading to test failure. This can be fixed by either going back to `oneline' or keeping `utf8' and adding additionally `space_eq'. Anoter way would be to teach the expect that the space is optional. Add explicit -nameopt option with `utf8,space_eq' which is understood by by OpenSSL 3.2 and earlier to make explicit. Remove the wildcard. Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
2024-01-23Debian package: Enable the [SSL] sectionAlexander Barton
This makes sense because the package is build with SSL support enabled, and we set and enable "CAFile" in commit ae9cfade -- which results in an error when this is not in an enabled(!) [SSL] section ...
2024-01-232nd attempt to always show the correct config file name ...Alexander Barton
But we are getting there!
2024-01-23Testsuite: Test for the openssl command before using itAlexander Barton
And skip the tests calling it instead of failing!
2024-01-23Correctly show the configuration file usedAlexander Barton
2024-01-21INSTALL.md: Add info for current Red Hat/Fedora systemsAlexander Barton
2024-01-21Migrate info from INSTALL.md into doc/QuickStart.mdAlexander Barton
Move most information regarding configuring ngIRCd into the doc/QuickStart.md document, only describe building and installing ngIRCd in the INSTALL.md file. Don't duplicate content! Add references where this makes sense.
2024-01-21Don't show the default config file name on config errorsAlexander Barton
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.
2024-01-21Use a default "IncludeDir" only when no config file was specifiedAlexander Barton
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. With this patch you now 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).
2024-01-21Add an introduction and generic info to doc/QuickStart.mdAlexander Barton
2024-01-21Debian package: Configure the system CA certificates storeAlexander Barton
2024-01-21Do not log channel keys ("passwords") for predefined channelsAlexander Barton
2024-01-21CI: Fix YAML, there shouldn't have been tabs in the file!Alexander Barton
2024-01-21CI: Looks like "cache-apt-pkgs-action" needs exact package namesAlexander Barton
And list only one package per line; way easier to read and maintain :-)
2024-01-21"ngIRCd CI" GitHub Action: Update and use cache-apt-pkgs-actionAlexander Barton
2024-01-21Make the description of the "Info" option more preciseAlexander Barton
The "Info" option in the "[Global]" section is optional (so comment it out in the sample configuration file) and set to the server software name and its version when not set (so add this information to the sample configuration file and the ngircd.conf(5) manual page).
2024-01-21Deduce a server name when not set in the configurationAlexander Barton
The server "Name" in the "[Global]" section of the configuration file is optional now: 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 behaviour, with all configuration parameters now being optional, allows running ngIRCd without any configuration file at all.
2024-01-20Explicitly test for the empty string in Channel_UserHasMode()Alexander Barton
Basically this is unnecessary, as Channel_UserModes() always returns a valid pointer and strchr() can deal with an empty (NULL-terminated) string perfectly fine, bit it makes the code a bit more obvious and silences the following warning: In function ‘Channel_UserHasMode’, inlined from ‘Channel_Kick’ at channel.c:384:7: channel.c:784:16: warning: ‘strchr’ reading 1 or more bytes from a region of size 0 [-Wstringop-overread] 784 | return strchr(Channel_UserModes(Chan, Client), Mode) != NULL; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This was seen with "gcc (Debian 12.2.0-14) 12.2.0" at least.
2024-01-20Update the AUTHORS.md fileAlexander Barton
2024-01-20Update the mailing list address to ngircd@lists.barton.deAlexander Barton
2024-01-20Convert the AUTHORS file to MarkdownAlexander Barton
2024-01-20Update included Debian package configurationAlexander Barton
- Rewrite using current dh_make. - Standards-Version: 4.6.2. - No longer build 3 different packages; only build "ngircd" which now includes support for IDENT, PAM (disabled in the ngircd.conf installed by the package), SSL (OpenSSL), ZLib and IPv6. - Update package description accordingly. - No longer install a SysV init file, only install ngircd.service unit.
2024-01-20Remove outdated and obsolete targets from the toplevel MakefileAlexander Barton
This affects targets for Apple Xcode and Package Maker, which both are no longer supported/included in the ngIRCd distribution. See commits 0652c99b and 07219281, this is a leftover ...
2024-01-19Use -Werror when testing for -Wno-format-truncationAlexander Barton
Clang does not know the -Wno-format-truncation option of (current) GCC, but accepts unknown -W... options (exit core 0) but issues a warning message on every invocation. So for example on macOS, where Clang is used as "gcc", a new warning message was shown for every file to compile, since we enabled -Wno-format-truncation in commit 1d527eaf: warning: unknown warning option '-Wno-format-truncation' [-Wunknown-warning-option] Clang no longer acceps unknown -W... options by enabling -Werror, which this patch adds to the CFLAGS while testing for -Wno-format-truncation, which fixes this issue. This fixes commit 1d527eaf.
2024-01-18Annotate "fall through" cases to silence warningsAlexander Barton
Add a "/* fall through */" annotation to "case" statements which actually should "fall through" to silences GCC warning like this: hash.c: In function ‘jenkins_hash’: hash.c:110:27: warning: this statement may fall through [-Wimplicit-fallthrough=] 110 | case 12: c+=((UINT32)k[11])<<24; | ~^~~~~~~~~~~~~~~~~~~~~
2024-01-18Disable GCC -Wformat-truncation when suportedAlexander Barton
Pass -Wno-format-truncation when this is supported by GCC so silence warnings like this: conf.c: In function ‘Read_Config’: conf.c:985:60: warning: ‘snprintf’ output may be truncated before the last format character [-Wformat-truncation=] 985 | snprintf(file, sizeof(file), "%s/%s", | ^ conf.c:985:25: note: ‘snprintf’ output 2 or more bytes (assuming 257) into a destination of size 256 985 | snprintf(file, sizeof(file), "%s/%s", | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 986 | Conf_IncludeDir, entry->d_name); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The warning is correct, but this is basically why we use snprintf() in the first place.
2024-01-16Spelling fixes, mostly in file commentsAlexander Barton