Commit graph

26 commits

Author SHA1 Message Date
a09dfc74df auth: constant-time compare for VHOST and WEBIRC secrets — both used plain == on the config password, unlike oper/RPC/JWT secrets which already route through ct_eq; expose password_hash::ct_eq as the shared comparator and use it (usernames stay plain == — not secret) 2026-08-19 00:41:47 +00:00
c99f16f3e0 webirc: require a non-empty source-IP mask on a webirc block — an empty ipmask meant "any IP", so a maskless webirc=<password> block turned one shared secret into a full host/IP spoof (bypassing z-lines, DNSBL, GeoIP, cloak) for anyone who learned it; now the gateway's connecting IP must match the block's ipmask 2026-08-19 00:34:25 +00:00
235c747c03 refactor: WEBIRC gateways and +G censor rules are named structs (WebircGateway/CensorRule) instead of positional tuples — self-documenting field access, no (_, g, _) index guessing; extends the OperBlock pattern 2026-08-18 23:31:21 +00:00
ba9d62b172 cap: advertise IRCv3 sts policy (sts_duration/sts_port/sts_preload) for TLS upgrade 2026-08-16 18:19:04 +00:00
4ce500e525 cap: fold CAP LS 302 into multiple continuation lines to stay under 512 bytes 2026-08-16 18:17:29 +00:00
62f901bdc8 sasl: wrap the s2s sasl relay in encap (client/agent/mode/data) so services drive authenticate, account via metadata 2026-08-15 12:04:09 +00:00
56d3774647 rline: native regex engine (thompson nfa, no backtracking) + RLINE regex bans (registration/enforce/stats R/matchonnickchange) 2026-08-10 21:48:52 +00:00
b76fbfdb79 services: SVSHOLD nick reservation, SVSTOPIC, SVSOPER, SVSCMODE over s2s (+ stats S) 2026-08-10 21:00:23 +00:00
f5f888dbaa connectclass: per-class connection policy (allow/deny, localmax, password, maxchans, pingfreq, timeout, modes) + PASS 2026-08-10 17:49:12 +00:00
1dd7f77ca8 operprefix + ojoin: server oper prefix (!/mode y, above owner) auto-granted to opers + OJOIN command 2026-08-10 13:01:07 +00:00
61954f6c5c conn_waitpong: optionally require a PONG cookie before registration (anti-bot) 2026-08-09 23:04:14 +00:00
61584a545b config: make flood/dnsbl/multiline/chathistory/extjwt limits + nick/chan/watch/monitor/silence/whowas/timeouts configurable (no hardcoded options) 2026-08-09 22:52:39 +00:00
b0d767a809 modules: port account_registration (REGISTER/VERIFY over async HTTP API) + async http infra 2026-08-09 11:48:17 +00:00
131471e245 modules: move all per-module state/config out of server.rs/config.rs into own files 2026-08-09 11:18:04 +00:00
64dcbd8bf4 securitygroups: UnrealIRCd-style groups + g: extban + SECURITYGROUPS + WHOIS 2026-08-09 08:08:06 +00:00
f4c01e1bf8 OPERMOTD, self-service VHOST, and command aliases (config-driven) 2026-08-09 01:19:24 +00:00
e2a4a3e248 NICKLOCK / NICKUNLOCK (services hold a user's nick) 2026-08-09 01:09:46 +00:00
c641e23a81 draft/pre-away: allow AWAY during CAP negotiation (before registration) 2026-08-08 21:53:40 +00:00
045e7d3ee7 Revert "ircv3 STS: advertise sts= (port on plaintext, duration/preload on tls) — the modern tls-upgrade cap"
This reverts commit e0b22a34d0.
2026-08-08 21:51:06 +00:00
6cf9f01ff8 ircv3 STS: advertise sts= (port on plaintext, duration/preload on tls) — the modern tls-upgrade cap 2026-08-08 21:48:05 +00:00
cc3240c04f x-lines: eline (ban exempt), shun (drop commands), qline (reserved nicks) 2026-08-08 20:16:05 +00:00
49a1bf08b9 webirc: restrict a gateway password to a source ip-mask; document webirc in the example config 2026-08-08 20:02:22 +00:00
81e9728cfa webirc: trusted web gateways can set the real client host/ip (webirc config blocks) 2026-08-08 19:42:10 +00:00
02528df5e9 sasl external: request tls client cert, plumb sha256 certfp through to user, relay to services; advertise sasl=PLAIN,EXTERNAL on tls 2026-08-08 19:36:48 +00:00
8d31feb4e7 sasl relay over s2s: authenticate plain forwarded to services (sasl_server), 900/903 on success; fails clean with no services 2026-08-08 19:28:53 +00:00
9b12791774 import echoircd — from-scratch irc daemon in native rust 2026-08-05 16:10:31 +00:00