Commit graph

56 commits

Author SHA1 Message Date
6e8d6c31fb
snoop: connect notice includes port, sni and account (present fields only) 2026-08-25 00:06:22 +00:00
b6ada854cc
brand: per-SNI server/network identity (welcome, ISUPPORT NETWORK, numeric source prefix) 2026-08-24 23:29:15 +00:00
009bea734a
whois: show negotiated TLS version/group/cipher in 671; sslgroup crate reads the KEX group 2026-08-24 21:45:46 +00:00
3ad67c6b52
xline: broadcast the XLINE notice on remove and expire too, so it covers every x-line's whole lifecycle 2026-08-21 15:03:36 +00:00
1824af5d90
signore: persist per-account via services metadata — push on edit, replay on login 2026-08-20 15:40:19 +00:00
f3ce0e61ef
s2s: accept a swhois metadata key from services — set (or clear, when empty) the user's SWHOIS ext, shown in WHOIS 320 2026-08-20 00:02:02 +00:00
b106b66de5 s2s: validate source_behind on ADDLINE/DELLINE/INVITE too — these apply network state (x-lines, invite bypass) from msg.source with no check the source sits behind the arriving link; a legit source (incl. a services SID/uuid) always is, so echo's akills still propagate 2026-08-19 04:57:39 +00:00
155e804779 s2s: extend source_behind to FTOPIC/RENAME/UID/OPERTYPE/REDACT — the guard was on plain TOPIC but not its S2S twin FTOPIC (a peer could forge a network-wide topic overwrite), nor channel RENAME, UID (SID announce unchecked), OPERTYPE, or REDACT; all now validate the source lives behind the arriving link 2026-08-19 04:45:06 +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
a80b86b50d perf: S2S channel-message fanout shares the line by Arc across members (relay_channel_message) instead of cloning a String per recipient — mirrors the client PRIVMSG fanout; builds at most three variants (plain / server-time / echo-services-tagged) whatever the channel size, behaviour unchanged 2026-08-19 00:47:32 +00:00
11cec9fc36 s2s/xline: reject a malformed ADDLINE duration instead of coercing it to 0 (= a silent permanent ban), and make add_xline expiry saturating (n.saturating_add) so a peer sending duration=u64::MAX can't overflow-panic the debug build or wrap in release 2026-08-19 00:39:40 +00:00
1763a95985 s2s: validate a message source actually lives behind the link it arrived on (source_behind) before applying remote JOIN/IJOIN/KICK/TOPIC/MODE/KILL/PRIVMSG — else a peer could forge ops/kicks/bans/topics/service-badged messages for users behind another link; NICK/QUIT/PART already guarded this, now the channel-state handlers do too 2026-08-19 00:32:09 +00:00
cf2b157842 perf: to_channel shares one Arc<str> across all broadcast recipients instead of cloning the line per member (server-time members share a single time-tagged variant); single-recipient sends unchanged 2026-08-18 20:30:07 +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
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
92a3f5ba86 s2s: propagate CHGHOST/CHGIDENT host/ident changes to links (were applied locally only); inbound path uses a non-propagating variant to avoid a loop 2026-08-17 19:38:58 +00:00
da36d5c32a s2s: FJOIN TS arbitration wipes list modes+topic on loss and merges on equal TS; arbitrate remote-remote nick collisions (rewrite forward); IJOIN/FTOPIC channel-TS handling 2026-08-17 19:32:18 +00:00
62c0141362 test: services standard reply (SWSTDRPL) reaches a standard-replies client 2026-08-17 13:12:31 +00:00
5722640957 s2s: handle echo's metadata profile keys, standard replies, OPERTYPE and REDACT; emit ssl_cert + OPERTYPE 2026-08-17 13:08:14 +00:00
8f765bfba7 s2s: deliver server-sourced NOTICE/PRIVMSG (services SET SNOTICE) instead of dropping it 2026-08-17 11:40:46 +00:00
e10ea609ed s2s: apply inbound CHGHOST/CHGIDENT (services vhost) instead of dropping it 2026-08-17 00:36:03 +00:00
68b80c3f82 s2s: announce remote members arriving via FJOIN to local channel members 2026-08-16 19:26:10 +00:00
ef84846267 invite: route INVITE for a remote target to its server and deliver inbound INVITE 2026-08-16 19:11:57 +00:00
d4a7043d10 s2s: resolve nick collisions by timestamp (force-rename loser to its UUID, SAVE) instead of killing; services always keep their nick 2026-08-16 19:03:07 +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
7908fe50b0 s2s: propagate x-lines (ADDLINE/DELLINE) — apply from peers, announce local ones, burst on link 2026-08-16 18:01:52 +00:00
98fb848b8c s2s: route and apply KILL across the link (inbound handler + remote-target routing) 2026-08-16 17:57:50 +00:00
4028cd3c84 s2s: verify NICK/QUIT/PART source is reached via the link it arrived on 2026-08-16 17:54:20 +00:00
e87c9fd9ca s2s: reject malformed or duplicate UIDs on introduction 2026-08-16 17:50:25 +00:00
9ff0d8c629 s2s: apply METADATA accountname only from a services source 2026-08-16 17:48:21 +00:00
04423388d5 services: reword uline/service code comments, drop external daemon references 2026-08-16 14:12:18 +00:00
36b8a31a9a services: name the service message tag @echo/services (the project), not a foreign/author vendor prefix 2026-08-16 14:00:17 +00:00
d012623dff services: add server-level uline/is_service flag and gate the service WHOIS line, echo/services tag, MAP/LINKS hide and SVS* on it 2026-08-16 13:43:17 +00:00
64d3bfc003 test: cover IJOIN status-mode application (bot joins +ao) — regression guard for the S2S ijoin handler that previously had none 2026-08-16 13:16:09 +00:00
91022cffe8 whois: track remote users' umodes from UID; show 335 (is a bot) for remote +B services/bots and 379 modes to opers 2026-08-15 23:50:07 +00:00
35af95fd0f harden: connclass clone-cap at register, ws control-frame limits, uuid recycle-skip, json-escape extjwt/filehost claims, metadata value/key caps, cloak numeric-dotted leak, relaymsg remote-nick, rpc set_oper block validation, isupport 13-token split, multi-hop privmsg routing, connectdelay=0 2026-08-15 16:27:11 +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
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
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
749a1c3b69 customprefix: config-override channel-prefix sigils per tier (customprefix = <tier> <sigil>); PREFIX/NAMES/FJOIN consistent 2026-08-11 19:01:45 +00:00
b76fbfdb79 services: SVSHOLD nick reservation, SVSTOPIC, SVSOPER, SVSCMODE over s2s (+ stats S) 2026-08-10 21:00:23 +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
1dd7f77ca8 operprefix + ojoin: server oper prefix (!/mode y, above owner) auto-granted to opers + OJOIN command 2026-08-10 13:01:07 +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
cab53016e8 TBAN timed channel bans (auto-lift on the tick) 2026-08-09 00:58:37 +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
d4c4c1a7d0 draft/multiline: inbound BATCH parsing + concat assembly, deliver assembled lines; advertise limits 2026-08-08 22:07:04 +00:00
d135009d4e multi-hop s2s: forward svs*/metadata/sasl to the target's server, route/flood encap by mask (Message::to_wire) 2026-08-08 20:09:15 +00:00