5dfedb5091
opers: wire eight more privileges over their raw is_oper gates
...
Convert the remaining oper bypass/visibility gates to named privileges:
channels/restricted-create, channels/ignore-nonicks, users/ignore-callerid,
users/secret-whois, users/ignore-restrictmsg, servers/use-disabled-commands,
servers/ignore-securelist, servers/ignore-blockamsg. The override class gains
the channel/message/anti-spam bypasses, auspex gains secret-whois +
ignore-callerid, server gains use-disabled-commands; netadmin keeps all via
privs=*. Docs updated; verified restricted-create + ignore-nonicks live.
2026-08-29 13:11:08 +00:00
4e72ef790c
opers: gate NAMES secret-channel visibility on channels/auspex too
...
Completes the auspex coverage — NAMES now matches WHO/WHOIS/LIST (secret/
private channel members shown to channels/auspex holders, not any oper).
2026-08-29 02:43:35 +00:00
bc412c218e
opers: organize privileges and enforce them at flood/join/visibility gates
...
Add a central privs registry and convert raw is_oper gates to named
privileges: users/flood (message + join flood exempt), channels/override
(the +k/+b/+i/+l/+z/+R/+J / CBAN / max-channels join bypasses),
servers/auspex (hidden services in LINKS/MAP), users/ignore-commonchans
(+c PM gate). The override class now grants channels/override + users/flood;
the auspex class adds servers/auspex. netadmin keeps all via privs=*.
2026-08-29 02:05:23 +00:00
bf1446a51b
asn: A:<asn> matching extban (ban/exempt by origin AS); advertise A in EXTBAN
2026-08-28 18:53:04 +00:00
6bb8ccd8ee
modules: draft/event-playback — record JOIN/PART/QUIT/NICK/MODE/TOPIC/KICK into CHATHISTORY, replayed only for cap clients (event_playback config, default on)
2026-08-25 22:17:26 +00:00
ef96bcbd06
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)
2026-08-25 13:04:31 +00:00
5a9825ee61
comments: strip stray reference-implementation names from a handful of module/inline comments
2026-08-20 10:11:07 +00:00
1aa02a08b9
channels: replace Member's six parallel prefix bools (oprefix/owner/admin/op/halfop/voice) with a single u8 bitfield (PFX_*) + inline bool accessors/mutators — same semantics, one byte instead of six, no more risk of the flags drifting out of sync; all call sites go through op()/set_op()-style methods
2026-08-19 02:47:04 +00:00
ab0ccae71f
server: scrub a departed user's pending invites via a User.invited reverse index instead of scanning every channel on the network per quit — the old O(channels)-per-quit path was O(channels*quits) on a netsplit; the index is maintained at the 4 invite add/remove sites (INVITE cmd, S2S INVITE, join-consume, UNINVITE)
2026-08-19 02:09:36 +00:00
910422199b
perf: glob_match takes a zero-allocation byte-wise path for ASCII operands (the norm for hostmasks/IPs/cloaks) instead of collecting two Vec<char> per call — it runs per-message (filter), per-user (extbans/tline) and per-channel (channelban); non-ASCII still uses the Unicode-lowercased fallback, and a proptest pins the two paths equal on ASCII
2026-08-19 00:45:14 +00:00
a3dc7b521f
test: deterministic two-node S2S convergence simulator — real handshake + join/part/rejoin/FJOIN-TS-arbitration driven through actual code paths, proptest-randomised churn asserts both sides always converge; extract Server::part so the sim and the PART command share one path
2026-08-18 22:24:19 +00:00
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