inspircd: restore logins from replayed accountname metadata
All checks were successful
CI / check (push) Successful in 3m45s

The inbound parser ignored METADATA entirely, so on a services netburst
(after a restart/relink) the ircd's replayed 'accountname' metadata was
dropped — every logged-in user looked logged out to services until they
re-identified, losing ChanServ access. Parse METADATA <uid> accountname
into a new AccountLogin event that restores account_of (empty = logout);
our own echoes and other keys are filtered.
This commit is contained in:
Jean Chevronnet 2026-07-16 09:54:35 +00:00
parent 99df7baf10
commit 7e868babc3
No known key found for this signature in database
4 changed files with 58 additions and 0 deletions

View file

@ -850,6 +850,18 @@ impl Engine {
}
out
}
NetEvent::AccountLogin { uid, account } => {
// The ircd told us who a user is logged in as (e.g. replayed on our
// netburst). Restore the mapping so services recognise the login;
// no side-effects — the burst already put them in their channels.
if account.is_empty() {
self.network.clear_account(&uid);
} else {
self.network.set_account(&uid, &account);
self.pending_enforce.retain(|p| p.uid != uid);
}
Vec::new()
}
NetEvent::NickChange { uid, nick } => {
let new_nick = nick.clone();
self.network.user_nick_change(&uid, nick);