add +k servprotect umode (server-set-only, advertised in 004/umodes): blocks KILL, KICK and SA* on a network service; tracked for remote services too
This commit is contained in:
parent
91022cffe8
commit
b7600ee5aa
5 changed files with 69 additions and 1 deletions
21
src/mode.rs
21
src/mode.rs
|
|
@ -1165,6 +1165,7 @@ static USER_MODES: &[&(dyn UserMode + Sync)] = &[
|
|||
&HIDEOPER,
|
||||
®DEAF,
|
||||
®ISTERED,
|
||||
&SERVPROTECT,
|
||||
&SSLPM,
|
||||
&SNOMASK,
|
||||
&CALLERID,
|
||||
|
|
@ -1406,6 +1407,26 @@ impl UserMode for RegisteredMode {
|
|||
}
|
||||
}
|
||||
|
||||
/// `+k` — servprotect. Set only by a linked server / services (under `mode_sudo`);
|
||||
/// a client can never toggle it. Marks the user as protected from KILL/KICK/SA*.
|
||||
struct ServProtect;
|
||||
static SERVPROTECT: ServProtect = ServProtect;
|
||||
impl UserMode for ServProtect {
|
||||
fn letter(&self) -> char {
|
||||
'k'
|
||||
}
|
||||
fn apply(&self, s: &mut Server, uid: Uid, adding: bool) -> bool {
|
||||
if !s.mode_sudo {
|
||||
return false; // server/services-only
|
||||
}
|
||||
if let Some(u) = s.users.get_mut(&uid) {
|
||||
u.flags.servprotect = adding;
|
||||
return true;
|
||||
}
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
/// `+s` — server-notice (snomask) receiver. Oper-only to set; anyone may drop it.
|
||||
static SNOMASK: OperFlag = OperFlag {
|
||||
ch: 's',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue