|
|
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 |
|