diff options
| author | tv <tv@krebsco.de> | 2026-11-07 22:35:22 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-07 22:35:22 +0100 |
| commit | d322e7d4aa41d94232113cb7680cec1d65a11b0c (patch) | |
| tree | 874e03dbf7acebc51a144498c89c43b335641bf7 /src/swarm/sync.rs | |
| parent | a99bacc0c90ca7a7f879cec8a8fb33f4aa14e84f (diff) | |
access: members refused as a whole
With signatures required, a member whose own change broke a rule is
refused as a whole: sent nothing, shown in /peers (refused), in stats
(sync.refusedPeers) and on the dashboard, until a change of its is
taken again or the epoch changes.
Auth plan M6 (diverged standing).
Diffstat (limited to 'src/swarm/sync.rs')
| -rw-r--r-- | src/swarm/sync.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/swarm/sync.rs b/src/swarm/sync.rs index f5d6bfb..9f928ad 100644 --- a/src/swarm/sync.rs +++ b/src/swarm/sync.rs @@ -36,6 +36,14 @@ async fn deliver_sync_to_peer(state: &AppState, peer: &str) -> Result<()> { trace!("Peer was forgotten; skipping sync"); return Ok(()); }; + { + use crate::locks::MutexExt; + if state.screening.lock_or_recover().refusing(peer).is_some() { + // All it commits builds on what we refused (`access::screen`). + trace!("Refusing the peer as a whole; not syncing with it"); + return Ok(()); + } + } let we_ready = state.is_ready().await; |
