9.5 KiB
9.5 KiB
Changelog
Release history for the echoIRCd daemon. The full commit log lives on git.devtronic.pro/echo/echoIRCd.
5.0.1 — 2026-08-30
Rolls up the changes since 5.0.0.
Highlights
- SASL — added the SCRAM-SHA-256 and ECDSA-NIST256P-CHALLENGE mechanisms; both are challenge/response, so they're advertised even on the plaintext port.
- Operator privileges — a full privilege model: oper types and reusable capability classes, named
privileges enforced at the flood / join / visibility gates, a per-type usermode/chanmode
allow-list, and
-denytoken exclusion. See Operators. - Connect notices — the connecting-client snote now shows the IP (tagged ipv4/ipv6), the
+xcloaked host, the transport (WebSocket) and TLS version/cipher, and the port / SNI / account — with IP and geo/ASN redacted from non-netadmin opers. Plus a post-connect "now logged in" notice. - GeoIP & ASN — a native MaxMind ASN-lookup module, an
A:<asn>extban, connect-class and security-group matching on origin AS, and city + ASN added to geo in the connect snote, WHOIS, andGEOIP. - IRCv3 — draft/event-playback (JOIN/PART/QUIT/NICK/MODE/TOPIC/KICK replayed into CHATHISTORY) and draft/webpush (RFC 8291/8292 Web Push with VAPID).
- Localization — server-wide locale via
lang/<code>.confcatalogs (fr, es): the welcome burst, numerics, and the snotice / oper-command / xline / WHOIS paths are all translated at a single chokepoint, with English staying zero-cost. - Per-SNI branding — a
brandblock lets one daemon present multiple server/network identities keyed by the TLS SNI host. - Operations — an
echoircd rehashCLI andSIGHUPin-place config reload,RPL_VERSIONenriched with build and toolchain provenance, and the watchdog now names the slow event.
Commits in this release
- release: bump version to 5.0.1 (
0be6daa) - sasl: advertise and relay ECDSA-NIST256P-CHALLENGE (
ed58813) - sasl: offer and relay SCRAM-SHA-256 (advertised on plaintext too) (
dfbe8e8) - opers: use the priv-name constants at the auspex checks; remove unused fns (
a922a30) - io: bound the blocking TLS handshake write side + the wss TLS handshake (
369e06e) - opers: add users/ignore-privdeaf — reach +D deaf users (
2d42fbd) - opers: wire eight more privileges over their raw is_oper gates (
5dfedb5) - docs: document the oper privilege model (types/classes, privileges, mode allowlist) (
bbe2682) - opers: apply the usermode allowlist to +s (snomask) too (
57c4cb0) - opers: gate NAMES secret-channel visibility on channels/auspex too (
4e72ef7) - opers: TokenList -deny exclusion for commands/privs + auspex-gate hidden chans (
55863e9) - opers: enforce the per-type usermode/chanmode allowlist (
e2a64b7) - opers: organize privileges and enforce them at flood/join/visibility gates (
bc412c2) - opertypes: enforced oper privilege system (users/auspex, channels/auspex) (
ff380d6) - snoop: redact connect-notice IP + geo/ASN to non-netadmin opers (
d73f68f) - snoop: show the +x cloaked host in the connect notice, not the raw host (
0af2ab7) - snoop: show connecting IP in the connect snote, tagged ipv4/ipv6 (
6a8999a) - asn: A:<asn> matching extban (ban/exempt by origin AS); advertise A in EXTBAN (
bf1446a) - asn: core ASN lookup module (native MMDB); match connect classes + security groups on origin AS (
068924d) - geoip: read city + ASN from MaxMind dbs; add geo (country/city + ASN) to connect snote, WHOIS and GEOIP (
cc13ce0) - snoop: show transport (websocket) + TLS version/cipher in the client-connecting snote (
f0c4a1c) - watchdog: name the slow event/command in the slow-event snote and [watchdog] warning (
106bda2) - link: announce a member's IJOIN status modes to local channel members so a rejoining services bot shows opped (
533666d) - docs/ircv3: document draft/event-playback, draft/webpush (WEBPUSH + VAPID ISUPPORT) (
8df756b) - readme: list draft/event-playback + draft/webpush under IRCv3 features (
f7ff5c3) - modules: draft/webpush — RFC 8291 (aes128gcm) + RFC 8292 (VAPID ES256) Web Push; WEBPUSH REGISTER/UNREGISTER, VAPID ISUPPORT, off-core delivery, HKDF/round-trip tested (
6ecb6f3) - modules: draft/event-playback — record JOIN/PART/QUIT/NICK/MODE/TOPIC/KICK into CHATHISTORY, replayed only for cap clients (event_playback config, default on) (
6bb8ccd) - readme: document server-wide message localization (locale/lang catalogs, fr+es) (
9dcc269) - i18n: localize the client-facing Closing-link ERROR wrapper via trf (fr, es); QUIT-broadcast reasons stay canonical for S2S (
0467173) - i18n: sweep all remaining dynamic prose (oper commands, XLINE/FILTER/DNSBL notices, whois/vhost/knock/dcc/title/reputation/tline/rmode, hash, rename) through trf; +\xNN catalog escape; fr+es now 236 entries each (
9b51db0) - i18n: localize the snotice/announce path — translate at deliver_server_notice chokepoint; rehash, connect/exit, oper-up, login, channel & ojoin notices via trf (fr, es) (
ef96bcb) - i18n: localize the welcome burst (001-003/251) via trf() dynamic templates (fr, es) (
6f8ff39) - i18n: server-wide locale via lang/<code>.conf catalogs (fr, es); numeric prose auto-translated at the chokepoint, en = zero-cost passthrough (
560c860) - websocket: collapse v4-mapped proxy peer so ws_proxyranges matches and X-Real-IP is honored (
5914a6d) - accounts: oper snotice on post-connect login ('Client X is now logged in as Y') (
935f22f) - snoop: drop needless clones in the connect notice (hold the &User borrow) (
37436d0) - snoop: connect notice includes port, sni and account (present fields only) (
6e8d6c3) - docs: document the brand block (per-SNI server/network identity) in the example config (
a587d25) - brand: per-SNI server/network identity (welcome, ISUPPORT NETWORK, numeric source prefix) (
b6ada85) - whois: show client-cert fingerprint (276) to everyone, not just opers/self (
f36f803)