|
|
d4dadf33e6
|
metrics: optional OpenMetrics/Prometheus endpoint (metrics_bind, off by default) — commands/messages/connects counters bumped inline via shared atomics, users/channels/servers/links gauges republished each tick; no event round-trip on the hot path
|
2026-08-18 22:34:36 +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 |
|
|
|
0da0906dc9
|
core: fire on_user_quit for unregistered users too — pre-registration module state (captcha Challenged/Verified) leaked one Uid per held-then-dropped bot
|
2026-08-17 21:37:18 +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 |
|
|
|
4b86de3b62
|
registration: add a Hold verdict so captcha/challenge modules pend the client for the challenge instead of tearing the link down
|
2026-08-17 19:06:17 +00:00 |
|
|
|
0f28083855
|
markread: persist account-keyed read markers to disk and restore them at startup
|
2026-08-17 02:12:17 +00:00 |
|
|
|
b451ccbfd8
|
permchannels: persist +P channels (modes, topic, ts, list modes) to disk and restore them at startup
|
2026-08-17 01:43:29 +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 |
|
|
|
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 |
|