Releases: ergochat/ergo
v2.12.0
We're pleased to be publishing v2.12.0, a new stable release. This is another bugfix release aimed at improving client compatibility and keeping up with the IRCv3 specification process.
This release includes changes to the config file format, one of which is a compatibility break: if you were using accounts.email-verification.blacklist-regexes, you can restore the previous functionality by renaming blacklist-regexes to address-blacklist and setting the additional key address-blacklist-syntax: regex. See default.yaml for an example; for more details, see the "Changed" section below.
This release includes a database change. If you have datastore.autoupgrade set to true in your configuration, it will be automatically applied when you restart Ergo. Otherwise, you can update the database manually by running ergo upgradedb (see the manual for complete instructions).
Many thanks to @adsr, @avollmerhaus, @csmith, @EchedeyLR, @emersion, @eskimo, @julio-b, knolle, @KoxSosen, @Mikaela, @mogad0n, and @progval for contributing patches, reporting issues, and helping test.
Config changes
- Removed
accounts.email-verification.blacklist-regexesin favor ofaddress-blacklist,address-blacklist-syntax, andaddress-blacklist-file. See the "Changed" section below for the semantics of these new keys. (#1997, #2088) - Added
implicit-tls(TLS from the first byte) support for MTAs (#2048, #2049, thanks @EchedeyLR!)
Fixed
- Fixed an edge case under
allow-truncation: true(the recommended default isfalse) where Ergo could truncate a message in the middle of a UTF-8 codepoint (#2074) - Fixed
CHATHISTORY TARGETSbeing sent in a batch even without negotiation of thebatchcapability (#2066, thanks @julio-b!) - Errors from
/REHASHare now properly sanitized before being sent to the user, fixing an edge case where they would be dropped (#2031, thanks @eskimo! - Fixed some edge cases in auto-away aggregation (#2044)
- Fixed a FAIL code sent by draft/account-registration (#2092, thanks @progval!)
- Fixed a socket leak in the ident client (default/recommended configurations of Ergo disable ident and are not affected by this issue) (#2089)
Changed
- Bouncer reattach from an "insecure" session is no longer disallowed. We continue to recommend that operators preemptively disable all insecure transports, such as plaintext listeners (#2013)
- Email addresses are now converted to lowercase before checking them against the blacklist (#1997, #2088)
- The default syntax for the email address blacklist is now "glob" (expressions with
*and?as wildcard characters), as opposed to the full Go regular expression syntax. To enable full regular expression syntax, setaddress-blacklist-syntax: regex. - Due to line length limitations, some capabilities are now hidden from clients that only support version 301 CAP negotiation. To the best of our knowledge, all clients that support these capabilities also support version 302 CAP negotiation, rendering this moot (#2068)
- The default/recommended configuration now advertises the SCRAM-SHA-256 SASL method. We still do not recommend using this method in production. (#2032)
- Improved KILL messages (#2053, #2041, thanks @mogad0n!)
Added
- Added support for automatically joining new clients to a channel or channels (#2077, #2079, thanks @adsr!)
- Added implicit TLS (TLS from the first byte) support for MTAs (#2048, #2049, thanks @EchedeyLR!)
- Added support for draft/message-redaction (#2065, thanks @progval!)
- Added support for draft/pre-away (#2044)
- Added support for draft/no-implicit-names (#2083)
- Added support for the MSGREFTYPES 005 token (#2042)
- Ergo now advertises the standard-replies capability. Requesting this capability does not change Ergo's behavior.
Internal
- Release builds are now statically linked by default. This should not affect normal chat operations, but may disrupt attempts to connect to external services (e.g. MTAs) that are configured using a hostname that relies on libc's name resolution behavior. To restore the old behavior, build from source with
CGO_ENABLED=1. (#2023) - Upgraded to Go 1.21 (#2045, #2084); official release builds use Go 1.21.3, which includes a fix for CVE-2023-44487
- The default
maketarget is nowbuild(which builds anergobinary in the working directory) instead ofinstall(which builds and installs anergobinary to${GOPATH}/bin/ergo). Take note if building from source, or testing Ergo in development! (#2047) make irctestnow depends onmake install, in an attempt to ensure that irctest runs against the intended development version of Ergo (#2047)
v2.12.0-rc1
We're pleased to be publishing the release candidate for v2.12.0 (the official release should follow within a few weeks). This is another bugfix release aimed at improving client compatibility and keeping up with the IRCv3 specification process.
This release includes changes to the config file format, one of which is a compatibility break: if you were using accounts.email-verification.blacklist-regexes, you can restore the previous functionality by renaming blacklist-regexes to address-blacklist and setting the additional key address-blacklist-syntax: regex. See default.yaml for an example; for more details, see the "Changed" section below.
This release includes a database change. If you have datastore.autoupgrade set to true in your configuration, it will be automatically applied when you restart Ergo. Otherwise, you can update the database manually by running ergo upgradedb (see the manual for complete instructions).
Many thanks to @adsr, @avollmerhaus, @csmith, @EchedeyLR, @emersion, @eskimo, @julio-b, knolle, @KoxSosen, @mogad0n, and @progval for contributing patches, reporting issues, and helping test.
Config changes
- Removed
accounts.email-verification.blacklist-regexesin favor ofaddress-blacklist,address-blacklist-syntax, andaddress-blacklist-file. See the "Changed" section below for the semantics of these new keys. (#1997, #2088) - Added
implicit-tls(TLS from the first byte) support for MTAs (#2048, #2049, thanks @EchedeyLR!)
Fixed
- Fixed an edge case under
allow-truncation: true(the recommended default isfalse) where Ergo could truncate a message in the middle of a UTF-8 codepoint (#2074) - Fixed
CHATHISTORY TARGETSbeing sent in a batch even without negotiation of thebatchcapability (#2066, thanks @julio-b!) - Errors from
/REHASHare now properly sanitized before being sent to the user, fixing an edge case where they would be dropped (#2031, thanks @eskimo! - Fixed some edge cases in auto-away aggregation (#2044)
- Fixed a socket leak in the ident client (default/recommended configurations of Ergo disable ident and are not affected by this issue) (#2089)
Changed
- Bouncer reattach from an "insecure" session is no longer disallowed. We continue to recommend that operators preemptively disable all insecure transports, such as plaintext listeners (#2013)
- Email addresses are now converted to lowercase before checking them against the blacklist (#1997, #2088)
- The default syntax for the email address blacklist is now "glob" (expressions with
*and?as wildcard characters), as opposed to the full Go regular expression syntax. To enable full regular expression syntax, setaddress-blacklist-syntax: regex. - Due to line length limitations, some capabilities are now hidden from clients that only support version 301 CAP negotiation. To the best of our knowledge, all clients that support these capabilities also support version 302 CAP negotiation, rendering this moot (#2068)
- The default/recommended configuration now advertises the SCRAM-SHA-256 SASL method. We still do not recommend using this method in production. (#2032)
- Improved KILL messages (#2053, #2041, thanks @mogad0n!)
Added
- Added support for automatically joining new clients to a channel or channels (#2077, #2079, thanks @adsr!)
- Added implicit TLS (TLS from the first byte) support for MTAs (#2048, #2049, thanks @EchedeyLR!)
- Added support for draft/message-redaction (thanks @progval!)
- Added support for draft/pre-away
- Added support for draft/no-implicit-names
- Added support for the MSGREFTYPES 005 token (#2042)
- Ergo now advertises the standard-replies capability. Requesting this capability does not change Ergo's behavior.
Internal
- Release builds are now statically linked by default. This should not affect normal chat operations, but may disrupt attempts to connect to external services (e.g. MTAs) that are configured using a hostname that relies on libc's name resolution behavior. To restore the old behavior, build from source with
CGO_ENABLED=1. (#2023) - Upgraded to Go 1.21 (#2045, #2084)
- The default
maketarget is nowbuild(which builds anergobinary in the working directory) instead ofinstall(which builds and installs anergobinary to${GOPATH}/bin/ergo). Take note if building from source, or testing Ergo in development! (#2047) make irctestnow depends onmake install, in an attempt to ensure that irctest runs against the intended development version of Ergo (#2047)
v2.11.1
v2.11.0
We're pleased to be publishing v2.11.0, a new stable release. This is another bugfix release aimed at improving client compatibility and keeping up with the IRCv3 specification process.
This release includes changes to the config file format, all of which are fully backwards-compatible and do not require updating the file before upgrading. It includes no changes to the database file format.
Many thanks to dedekro, @emersion, @eskimo, @FiskFan1999, hauser, @jwheare, @kingter-sutjiadi, knolle, @Mikaela, @mogad0n, @PeGaSuS-Coder, and @progval for contributing patches, reporting issues, and helping test.
Config changes
- Added
fakelag.command-budgets, which allows each client session a limited number of specific commands that are exempt from fakelag. This improves compatibility with Goguma in particular. For the current recommended default, seedefault.yaml(#1978, thanks @emersion!) - The recommended value of
server.casemappingis nowasciiinstead ofprecis. PRECIS remains fully supported; if you are already running an Ergo instance, we do not recommend changing the value unless you are confident that your existing users are not relying on non-ASCII nicknames and channel names. (#1718)
Changed
- Network services like
NickServnow appear inWHOresponses where applicable (#1850, thanks @emersion!) - The
extended-monitorcapability now appears under its ratified name (#2006, thanks @progval!) TAGMSGno longer receives automaticRPL_AWAYresponses (#1983, thanks @eskimo!)UBANnow states explicitly that bans without a time limit have "indefinite" duration (#1988, thanks @mogad0n!)
Fixed
WHOwith a bare nickname as an argument now shows invisible users, comparable toWHOIS(#1991, thanks @emersion!)- MySQL did not work on 32-bit architectures; this has been fixed (#1969, thanks hauser!)
- Fixed the name of the
CHATHISTORY005 token (#2008, #2009, thanks @emersion!) - Fixed handling of the address
::1in WHOX output (#1980, thanks knolle!) - Fixed handling of
AWAYwith an empty parameter (the de facto standard is to treat as a synonym for no parameter, which means "back") (#1996, thanks @emersion, @jwheare!) - Fixed incorrect handling of some invalid modes in
CS AMODE(#2002, thanks @eskimo!) - Fixed incorrect help text for
NS SAVERIFY(#2021, thanks @FiskFan1999!)
Added
- Added the
draft/persistencecapability and associatedPERSISTENCEcommand. This is a first attempt to standardize Ergo's "always-on" functionality so that clients can interact with it programmatically. (#1982) - Sending
SIGUSR1to the Ergo process now prints a full goroutine stack dump to stderr, allowing debugging even when the HTTP pprof listener is disabled (#1975)
Internal
v2.11.0-rc1
We're pleased to be publishing the release candidate for 2.11.0 (the official release should follow in a week or so). This is another bugfix release aimed at improving client compatibility and keeping up with the IRCv3 specification process.
This release includes changes to the config file format, all of which are fully backwards-compatible and do not require updating the file before upgrading. It includes no changes to the database file format.
Many thanks to dedekro, @emersion, @eskimo, hauser, @jwheare, @kingter-sutjiadi, knolle, @Mikaela, @mogad0n, @PeGaSuS-Coder, and @progval for contributing patches, reporting issues, and helping test.
Config changes
- Added
fakelag.command-budgets, which allows each client session a limited number of specific commands that are exempt from fakelag. This improves compatibility with Goguma in particular. For the current recommended default, seedefault.yaml(#1978, thanks @emersion!) - The recommended value of
server.casemappingis nowasciiinstead ofprecis. PRECIS remains fully supported; if you are already running an Ergo instance, we do not recommend changing the value unless you are confident that your existing users are not relying on non-ASCII nicknames and channel names. (#1718)
Changed
- Network services like
NickServnow appear inWHOresponses where applicable (#1850, thanks @emersion!) - The
extended-monitorcapability now appears under its ratified name (#2006, thanks @progval!) TAGMSGno longer receives automaticRPL_AWAYresponses (#1983, thanks @eskimo!)- Sending
SIGUSR1to the Ergo process now prints a full goroutine stack dump to stderr, allowing debugging even when the HTTP pprof listener is disabled (#1975) UBANnow states explicitly that bans without a time limit have "indefinite" duration (#1988, thanks @mogad0n!)
Fixed
WHOwith a bare nickname as an argument now shows invisible users, comparable toWHOIS(#1991, thanks @emersion!)- MySQL did not work on 32-bit architectures; this has been fixed (#1969, thanks hauser!)
- Fixed the name of the
CHATHISTORY005 token (#2008, #2009, thanks @emersion!) - Fixed handling of the address
::1in WHOX output (#1980, thanks knolle!) - Fixed handling of
AWAYwith an empty parameter (the de facto standard is to treat as a synonym for no parameter, which means "back") (#1996, thanks @emersion, @jwheare!) - Fixed incorrect handling of some invalid modes in
CS AMODE(#2002, thanks @eskimo!)
Added
- Added the
draft/persistencecapability and associatedPERSISTENCEcommand. This is a first attempt to standardize Ergo's "always-on" functionality so that clients can interact with it programmatically. (#1982)
Internal
v2.10.0
We're pleased to be publishing v2.10.0, a new stable release.
This release contains no changes to the config file format or database file format.
Many thanks to @csmith, @FiskFan1999, @Mikaela, @progval, and @thesamesam for contributing patches, and to @emersion, @eskimo, @FiskFan1999, @jigsy1, @Mikaela, @mogad0n, @progval, and @xnaas for reporting issues and helping test.
Config changes
- For better interoperability with Goguma, the recommended value of
history.chathistory-maxmessageshas been increased to1000(previously100) (#1919)
Changed
- Persistent voice (
AMODE +v) in a channel is now treated as a permanent invite (i.e. overriding+ion the channel) (#1901, thanks @eskimo!) - If you are
+R, sending a direct message to an anonymous user allows them to send you replies (#1687, #1688, thanks @Mikaela and @progval!) 0is no longer valid as a nickname or account name, with a grandfather exception if it was registered on a previous version of Ergo (#1896)- Implemented the ratified version of the bot mode spec; the tag name is now
botinstead ofdraft/bot(#1938) - Privileged WHOX on a user with multiclient shows an arbitrarily chosen client IP address, comparable to WHO (#1897)
SAREGISTERis allowed even underDEFCONlevels 4 and lower (#1922)- Operators with the
historycapability are now exempted from time cutoff restrictions on history retrieval (#1593, #1955)
Added
- Added
draft/read-markercapability, allowing server-side tracking of read messages for synchronization across multiple clients. (#1926, thanks @emersion!) INFOnow includes the server start time (#1895, thanks @xnaas!)- Added
ACCEPTcommand modeled on Charybdis/Solanum, allowing+Rusers to whitelist users who can DM them (#1688, thanks @Mikaela!) - Added
NS SAVERIFYfor operators to manually complete an account verification (#1924, #1952, thanks @tacerus!)
Fixed
- Having the
samodeoperator capability made all uses of theKICKcommand privileged (i.e. overriding normal channel privilege checks); this has been fixed (#1906, thanks @pcho!) - Fixed
LIST <nalways returning no results (#1934, thanks @progval and @mitchr!) - NickServ commands are now more clear about when a nickname is unavailable because it was previously registered and unregistered (#1886, thanks @Mikaela!)
- Fixed KLINE'd clients producing a
QUITsnotice without a correspondingCONNECTsnotice (#1941, thanks @tacerus, @xnaas!) - Fixed incorrect handling of long/multiline
319 RPL_WHOISCHANNELSresponses (#1935, thanks @Mikaela!) - Fixed
LISTreturning403 ERR_NOSUCHCHANNELfor a nonexistent channel; the correct response is an empty list (#1928, thanks @emersion!) - Fixed
+s("secret") channels not appearing inLISTeven when the client is already a member (#1911, #1923, thanks @jigsy1 and @FiskFan1999!) - Fixed a spurious success message in
HISTSERV DELETEby always requiring a consistent number of parameters (#1881, #1927, thanks @FiskFan1999!) - Sending the empty string as a nickname would not always produce the expected error numeric
431 ERR_NONICKNAMEGIVEN; this has been fixed (#1933, #1936, thanks @kylef!) znc.in/playbacktimestamps are now parsed as pairs of exact integers, not as floats (#1918)
Internal
- Upgraded to Go 1.18 (#1925)
- Upgraded Alpine version in official Docker image
- Fixed some issues in the example OpenRC init scripts (#1914, #1920, thanks @thesamesam!)
v2.10.0-rc2
Testing of 2.10.0-rc1 revealed serious bugs in the new draft/read-marker implementation. Consequently, we're publishing a second release candidate that fixes these issues. The final release is expected within a week or so; we apologize for the delay.
Fixed
v2.10.0-rc1
We're pleased to be publishing the release candidate for 2.10.0 (the official release should follow in a week or so).
This release contains no changes to the config file format or database file format.
Many thanks to @csmith, @FiskFan1999, @Mikaela, @progval, and @thesamesam for contributing patches, and to @emersion, @eskimo, @FiskFan1999, @jigsy1, @Mikaela, @mogad0n, @progval, and @xnaas for reporting issues and helping test.
Config changes
- For better interoperability with Goguma, the recommended value of
history.chathistory-maxmessageshas been increased to1000(previously100) (#1919)
Changed
- Persistent voice (
AMODE +v) in a channel is now treated as a permanent invite (i.e. overriding+ion the channel) (#1901, thanks @eskimo!) - If you are
+R, sending a direct message to an anonymous user allows them to send you replies (#1687, #1688, thanks @Mikaela and @progval!) 0is no longer valid as a nickname or account name, with a grandfather exception if it was registered on a previous version of Ergo (#1896)- Implemented the ratified version of the bot mode spec; the tag name is now
botinstead ofdraft/bot(#1938) - Privileged WHOX on a user with multiclient shows an arbitrarily chosen client IP address, comparable to WHO (#1897)
SAREGISTERis allowed even underDEFCONlevels 4 and lower (#1922)- Operators with the
historycapability are now exempted from time cutoff restrictions on history retrieval (#1593, #1955)
Added
- Added
draft/read-markercapability, allowing server-side tracking of read messages for synchronization across multiple clients. (#1926, thanks @emersion!) INFOnow includes the server start time (#1895, thanks @xnaas!)- Added
ACCEPTcommand modeled on Charybdis/Solanum, allowing+Rusers to whitelist users who can DM them (#1688, thanks @Mikaela!) - Added
NS SAVERIFYfor operators to manually complete an account verification (#1924, #1952, thanks @tacerus!)
Fixed
- Having the
samodeoperator capability made all uses of theKICKcommand privileged (i.e. overriding normal channel privilege checks); this has been fixed (#1906, thanks @pcho!) - Fixed
LIST <nalways returning no results (#1934, thanks @progval and @mitchr!) - NickServ commands are now more clear about when a nickname is unavailable because it was previously registered and unregistered (#1886, thanks @Mikaela!)
- Fixed KLINE'd clients producing a
QUITsnotice without a correspondingCONNECTsnotice (#1941, thanks @tacerus, @xnaas!) - Fixed incorrect handling of long/multiline
319 RPL_WHOISCHANNELSresponses (#1935, thanks @Mikaela!) - Fixed
LISTreturning403 ERR_NOSUCHCHANNELfor a nonexistent channel; the correct response is an empty list (#1928, thanks @emersion!) - Fixed
+s("secret") channels not appearing inLISTeven when the client is already a member (#1911, #1923, thanks @jigsy1 and @FiskFan1999!) - Fixed a spurious success message in
HISTSERV DELETEby always requiring a consistent number of parameters (#1881, #1927, thanks @FiskFan1999!) - Sending the empty string as a nickname would not always produce the expected error numeric
431 ERR_NONICKNAMEGIVEN; this has been fixed (#1933, #1936, thanks @kylef!) znc.in/playbacktimestamps are now parsed as pairs of exact integers, not as floats (#1918)
Internal
- Upgraded to Go 1.18 (#1925)
- Upgraded Alpine version in official Docker image
- Fixed some issues in the example OpenRC init scripts (#1914, #1920, thanks @thesamesam!)
v2.9.1
Ergo 2.9.1 is a bugfix release, fixing a regression introduced in 2.9.0. We regret the oversight.
This release includes no changes to the config file format or database format relative to 2.9.0.
Many thanks to @FiskFan1999 for reporting the issue.
Fixed
- Every use of NS SAREGISTER would fail; this has been fixed (#1898, thanks @FiskFan1999!)
v2.9.0
We're pleased to be publishing 2.9.0, a new stable release. This release contains mostly bug fixes, with some enhancements to moderation tools.
This release includes changes to the config file format, all of which are fully backwards-compatible and do not require updating the file before upgrading. It includes no changes to the database file format.
Many thanks to @erincerys, @FiskFan1999, @mogad0n, and @tacerus for contributing patches, and to @ajaspers, @emersion, @FiskFan1999, @Jobe1986, @kylef, @mogad0n, @pcho, and @progval for reporting issues,
Config changes
- Added
lock-file, which helps protect against accidentally starting multiple instances of Ergo. This is a no-op if unset. The recommended default value isircd.lock, which (like the default datastore pathircd.db) is relative to the working directory of the Ergo process. If yourdatastore.pathis absolute, this path (if set) should be absolute as well. (#1823) +C(no channel-wide CTCP messages other than ACTION) is now a recommended default channel mode (#1851)- Added
exempt-saslboolean toserver.ip-check-script; if enabled, IP check scripts are run only for connections without SASL, improving performance for registered users (#1888) hidden: trueis now the recommended default for operator definitions (#1730)
Changed
- The semantics of
+Rhave been changed.+Rnow only prevents unauthenticated users from joining, so unregistered users who have already joined can still speak. The old semantics are still available via+RM(i.e.+Rtogether with the+M"moderated-registered" mode). (#1858, thanks @ajaspers!) - Unauthenticated users matching a
+Iinvite exception mask can now join+Rchannels (#1871) - INVITE now exempts the user from
+bbans (#1876, thanks @progval!) - NS SUSPEND now only requires only the
banoperator capability, as opposed toaccreg(#1828, #1839, thanks @mogad0n!)
Added
- SHA-256 certificate fingerprints can now be imported from Anope and Atheme (#1864, #1869, thanks @tacerus!)
- IP check scripts can now be run only for users that have not authenticated with SASL by the end of the handshake, improving performance for registered users (#1888)
- Logging into an unverified account with SASL sends the new
NOTE AUTHENTICATE VERIFICATION_REQUIREDstandard reply code (#1852, #1853, thanks @emersion!) - CS PURGE now sends a snotice (#1826, thanks @tacerus!)
- The
vsnomask is now used to send notifications about vhost changes initiated by operators (#1844, thanks @pcho!)
Fixed
- CAP LS and LIST responses after connection registration could be truncated in some cases; this has been fixed (#1872)
- Unprivileged users with both a password and a certfp could not remove their password with
NS PASSWD <password> * *as expected; this has been fixed (#1883, #1884, thanks @FiskFan1999!) - RELAYMSG identifiers that were not already in their case-normalized form could not be muted with
+b m:; this has been fixed (#1838, thanks @mogad0n!) - CS AMODE changes did not take immediate effect if
force-nick-equals-accountwas disabled and the nick did not coincide with the account; this has been fixed (#1860, thanks @eskimo!) 315 RPL_ENDOFWHOnow sends the exact, un-normalized mask argument provided by the client (#1831, thanks @progval!)- A leading
$character is now disallowed in new nicknames and account names, to avoid collision with the massmessage syntax (#1857, thanks @emersion!) - The deprecated
oparameter ofWHOnow returns an empty list of results, instead of being ignored (#1730, thanks @kylef, @emersion, @progval!) - WHOX queries for channel oplevel now receive
*instead of0(#1866, thanks @Jobe1986!)
Internal
- Updated list of official release binaries: added Apple M1, OpenBSD x86-64, and Plan 9 x86-64, removed Linux armv7, FreeBSD x86-32, and Windows x86-32. (The removed platforms are still fully supported by Ergo; you can build them from source or ask us for help.) (#1833)
- Added an official Linux arm64 Docker image (#1855, thanks @erincerys!)
- Added service management files for OpenSolaris/Illumos (#1846, thanks @tacerus!)