Commit graph

37 commits

Author SHA1 Message Date
e935ee7002 harden: fix reachable panics (parse_duration/parse_iso/dechunk char-boundary+overflow), s2s netburst key/limit loss, rpc set_nick/set_vhost/notice injection, webirc rehash reload, panic-state reset, ws line cap, remote nick collision, per-conn state leaks 2026-08-15 15:02:36 +00:00
c231c6b8ef connclass: verify a KDF class password off the core thread with a registration hold (auth_pending + Event::ConnclassAuth) — connect floods can't freeze the server 2026-08-12 13:13:27 +00:00
2b3495be65 customtitle: verify a KDF /TITLE password off the core thread (Event::TitleAuth) — /TITLE spam can't freeze the server 2026-08-12 13:07:28 +00:00
7cb58586b4 core: generic spawn_crypto helper; offload all slow KDF hashing (OPER pbkdf2 too, and MKPASSWD) off the core thread 2026-08-12 13:05:29 +00:00
e246699fef oper: verify bcrypt passwords on a worker thread (Event::OperAuth), bounded — a bcrypt OPER no longer freezes the core, closing the OPER-spam DoS; fast hashes stay inline 2026-08-12 12:46:52 +00:00
6795243d5f core: slow-command snotice (slow_command_ms) + a watchdog thread (watchdog_ms) so a blocked core thread is visible instead of a silent freeze 2026-08-12 12:43:41 +00:00
8309b851f2 core: wrap each event handler in catch_unwind so one panicking command can't take the whole single-threaded server down 2026-08-12 12:41:16 +00:00
b40c523b87 customprefix: data-driven prefix engine — define arbitrary new prefix modes (letter/prefix/rank/ranktoset/ranktounset/depriv), ranks re-spaced x10; built-in tiers + defaults unchanged 2026-08-11 19:46:07 +00:00
749a1c3b69 customprefix: config-override channel-prefix sigils per tier (customprefix = <tier> <sigil>); PREFIX/NAMES/FJOIN consistent 2026-08-11 19:01:45 +00:00
3b2f30965a abbreviation: a unique command-prefix resolves to its full command (abbreviation = yes) 2026-08-11 18:46:16 +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
f371ed0a18 connclass: cidr/parent/port/limit/globalmax + hashed/trusted-cert passwords, per-class recvq/sendq + fakelag, and rfc1413 ident 2026-08-10 18:46:42 +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
e0d849b4c9 showfile: serve a text file as its own command (e.g. /RULES), config-driven like aliases 2026-08-09 23:00:07 +00:00
7a99f49ca4 geoip: native maxmind .mmdb reader, G: geoban extban, GEOIP command, whois country 2026-08-09 21:43:57 +00:00
19157e0722 websocket: native RFC 6455 transport (ws:// + wss://) — handshake, framing, ping/pong keepalive, idle timeout, origin/proxy flags, via_websocket 2026-08-09 18:45:12 +00:00
4b1f096ed8 rpc: JSON-RPC-over-HTTP control interface — native httpd + json + dispatch, core provider 2026-08-09 15:54:05 +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
789c2ca14f reputation module: per-IP score (tick accrual + persistence) + REPUTATION command; on_tick module hook 2026-08-09 07:28:48 +00:00
5f3ae2123d ircv3_metadata_db: persist channel metadata across restart 2026-08-09 07:25:42 +00:00
d4ce5c008f connflood: refuse connection floods from a single IP 2026-08-09 01:28:09 +00:00
f4c01e1bf8 OPERMOTD, self-service VHOST, and command aliases (config-driven) 2026-08-09 01:19:24 +00:00
6be8e5ebcb xline_db: persist x-lines/cbans to disk, reload on start 2026-08-09 01:15:43 +00:00
cab53016e8 TBAN timed channel bans (auto-lift on the tick) 2026-08-09 00:58:37 +00:00
ab7188bb70 move draft/multiline into its own module file 2026-08-08 22:49:54 +00:00
d4c4c1a7d0 draft/multiline: inbound BATCH parsing + concat assembly, deliver assembled lines; advertise limits 2026-08-08 22:07:04 +00:00
f5cc12e809 connect: oper can dial a configured server link on demand 2026-08-08 20:19:14 +00:00
cc3240c04f x-lines: eline (ban exempt), shun (drop commands), qline (reserved nicks) 2026-08-08 20:16:05 +00:00
1b7dbc4c0e labeled-response + batch: capture a labeled command's replies and wrap them (single label tag / BATCH / ACK) 2026-08-08 19:53:34 +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
e736188378 dnsbl on connect (m_dnsbl-style, ipv4+ipv6, own module), cache + parallelize resolver, group connect notices before cap 2026-08-08 02:26:02 +00:00
4fc26d13e9 reverse-dns clients on connect with pre-registration notices (checking ident / looking up your hostname) 2026-08-07 18:39:03 +00:00
58596aea66 scale the socket engine: mio epoll reactor for client connections (tens of thousands on a few threads) 2026-08-05 16:46:13 +00:00
9b12791774 import echoircd — from-scratch irc daemon in native rust 2026-08-05 16:10:31 +00:00