IRC services for InspIRCd networks, written in Rust. NickServ, ChanServ, and a dozen more, backed by an append-only event log instead of a database.
https://echo.dev.tronic.pro
Turn the PLAIN verification exchange into a full account login: - Advertise the mechanism list to the uplink as `saslmechlist` network metadata, so clients see `sasl=PLAIN` in CAP LS (SASL 3.2). - On a valid response set the client's `accountname` metadata (drives RPL_LOGGEDIN 900) before reporting success (D S, drives 903); a bad credential or unknown mechanism reports failure (D F, drives 904). - Reassemble the base64 response from the uplink's 400-byte AUTHENTICATE chunks, ending on a short chunk or a lone "+", with an upper bound to cap a pre-auth client's buffer. - Log the user in on NickServ REGISTER and IDENTIFY too, through the same accountname metadata, and return the canonical account name from the store so the login keeps its registered casing. Verified against irctest server_tests/sasl.py (PLAIN success/failure, non-ASCII, no-authzid, chunked payloads, unknown mechanism, too-long, retry) on InspIRCd + fedserv. |
||
|---|---|---|
| src | ||
| testing | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| config.example.toml | ||
| README.md | ||
fedserv
A federated IRC services daemon in Rust. Protocol-agnostic core, InspIRCd link first.
Clean-room — inspired by the ideas behind modern event-log/gossip services, not derived from any project's source.
Design
proto/— the ircd link layer. AProtocoltrait maps raw server-to-server lines to/from a normalizedNetEvent/NetActionmodel. The engine never touches a raw line, so a new ircd = one new module. InspIRCd is the first.engine/— the services engine: live networkstate, anEventLog(every persistent change is anEvent; state is a fold over the log — this is what makes replicating across nodes a later addition, not a rewrite), and theServicetrait.services/— the pseudo-clients: NickServ first, then ChanServ / OperServ / …
Run
cp config.example.toml config.toml # edit uplink + link password
cargo run -- config.toml
Status
Early scaffold: links to an InspIRCd uplink and introduces NickServ. Burst/mode handling and account persistence are next.