Commit graph

46 commits

Author SHA1 Message Date
621f06448d test: property-based fuzzing (proptest) for every untrusted-input parser — message line, PROXY header, WebSocket frame, regex engine, ban-mask, duration; asserts no-panic + round-trip/idempotence/bounds invariants 2026-08-18 22:17:17 +00:00
20b49add0b perf: mimalloc global allocator + aHash maps + memchr line framer + LTO/codegen-units=1 — ~29% faster channel fanout; and drop the bogus openssl+mio dependency whitelist from the guard (any perf crate is welcome now) 2026-08-18 19:45:33 +00:00
33a18b81cc channelban: leave the a: (account) extban mask verbatim — normalize_ban_mask was appending !*@* and breaking account matching 2026-08-18 15:59:00 +00:00
bcd958d2d3 ircv3: close server-support-table gaps — BOT=B ISUPPORT, account-extban (a: matcher + ACCOUNTEXTBAN=a), draft/read-marker cap (gates MARKREAD sync), and no-implicit-names (suppress the post-JOIN NAMES burst) 2026-08-18 15:56:59 +00:00
c9bd8e7492 channel-rename: implement IRCv3 draft/channel-rename — RENAME command + cap, in-place rename (RENAME for cap clients, PART/JOIN fallback for the rest), and S2S propagation 2026-08-17 23:45:02 +00:00
d6cc813aad channel: reclaim departed-member +f flood counters and expired +J entries on the tick (slow high-churn leak) 2026-08-17 20:37:51 +00:00
c1b7ed6dda channel: count remote members for +l, and propagate TBAN expiry (-b) over S2S 2026-08-17 14:52:38 +00:00
e57e4c3a6a names: fold the member list across multiple 353 replies to stay under 512 bytes 2026-08-16 18:45:12 +00:00
1ab643c870 s2s: timestamp arbitration for fjoin (lower TS wins — strip or wipe losing status), fmode and ftopic (drop changes stamped newer than ours) 2026-08-16 18:06:03 +00:00
579c321670 channels/whois: validate +k/+l, cap and case-fold ban lists, honour -n for externals, hide +s/+p/+i from whois/who/names, 301 in whois, conf-key the join/nickflood lockout 2026-08-16 17:56:24 +00:00
546f6279e7 snomasks: make +s a parametric snomask mode with the standard category letters (acdfgjklnoqrtuvwx), route each server notice by category, RPL_SNOMASKIS 008; opers default to all and narrow with +s -c etc. 2026-08-15 17:06:14 +00:00
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
3fa9737ccb link: stop services re-locking +r on every join — track the registered channel mode, keep +r channels alive when empty, use ijoin not fjoin for incremental joins, and consume s2s channel-mode params through the registry 2026-08-15 13:20:04 +00:00
1c8799d785 link: rework s2s wire format to the standard v4 server protocol (10-field uid, letters-comma fjoin, ijoin, timestamped fmode, ftopic, uuid kick) so external services link 2026-08-15 11:51:18 +00:00
dae0cb985b modes: render the full channel mode set in MODE queries — +P/Q/A/U/D and params +B/J/d/K were set but never shown 2026-08-14 17:42:34 +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
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
06883ced9f extbanbanlist: matching extban b:#chan (share another channel's ban list) 2026-08-10 09:37:51 +00:00
9d84a66437 autoop: +w <prefix>:<mask> channel list mode grants status on join 2026-08-10 08:18:07 +00:00
1a53c5ae5a banredirect: +b mask$#chan bounces a banned user to another channel (loop-guarded) 2026-08-09 23:17:32 +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
7a99f49ca4 geoip: native maxmind .mmdb reader, G: geoban extban, GEOIP command, whois country 2026-08-09 21:43:57 +00:00
140554719b modules: port randquote, disable, restrictchans, channames 2026-08-09 20:03:47 +00:00
dc22dcd072 modules: port securelist and denychans (badchan/goodchan with redirect) 2026-08-09 11:35:21 +00:00
245d8d8529 extban: add r: realnameban, j: channelban, s: serverban matching extbans 2026-08-09 11:30:53 +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
eb121a75f8 reputation: full port — y: score extban (y:<N/y:>N), WHOIS score, +2 for accounts, bump interval/scorecap/minchanmembers config; conn_join/conn_umodes/connbanner/operjoin/opermodes/seenicks/chancreate 2026-08-09 08:19:32 +00:00
64dcbd8bf4 securitygroups: UnrealIRCd-style groups + g: extban + SECURITYGROUPS + WHOIS 2026-08-09 08:08:06 +00:00
97a35338fa delayjoin +D: hide JOINs until a member speaks/reveals (NAMES + part/quit/nick aware) 2026-08-09 07:40:10 +00:00
80cc61e7f8 exemptchanops +X: per-rank exemptions from flood/anticaps/repeat/censor/blockcolor/etc 2026-08-09 07:34:42 +00:00
ef219bc98f oper override: bypass +i/+k/+b/+z/+R/+l/+J on JOIN with a snotice 2026-08-09 01:34:20 +00:00
1eca745092 repeat channel mode (+K <n>): block recently-repeated lines 2026-08-09 01:24:48 +00:00
668f2735b2 delaymsg channel mode (+d <secs>) 2026-08-09 01:22:27 +00:00
4d6525cac2 opmoderated channel mode (+U — route unprivileged messages to ops) 2026-08-09 01:07:30 +00:00
4a53c80d4d CBAN (forbid channel-name globs) + SSLINFO command 2026-08-09 01:04:33 +00:00
cab53016e8 TBAN timed channel bans (auto-lift on the tick) 2026-08-09 00:58:37 +00:00
37ea5d277d kicknorejoin channel mode (+J <secs>) 2026-08-09 00:50:55 +00:00
8dc51a281b channel modes +Q nokicks / +A allowinvite / +P permchannels; fix SWHOIS (full multi-word text, no doubled nick in WHOIS) 2026-08-09 00:47:10 +00:00
050ce37612 anticaps channel mode (+B <percent>) 2026-08-09 00:33:31 +00:00
431ef2f5b3 move chathistory + redact + the history store into their own module file 2026-08-08 22:54:52 +00:00
7bf9e4c0b8 channel +H chanhistory: replay recent messages to joiners (m_chanhistory), reuses the history store 2026-08-08 22:24:29 +00:00
2d08ca58ea services interface: svsnick, svsjoin, svspart, svsmode (user +r/channel); dry force_part shared with sapart 2026-08-08 18:20:24 +00:00
6d19b6771b whox (354) + ircv3 standard-replies (fail/warn/note), account-tag, and +s/+p who/names member hiding 2026-08-08 17:55:44 +00:00
9b12791774 import echoircd — from-scratch irc daemon in native rust 2026-08-05 16:10:31 +00:00