Watch
0
0
Fork
You've already forked hyperhive
0

swarm: no doc says the agent client is minted any more

This commit is contained in:
atlas 2026-10-13 10:25:19 +02:00 • committed by mara
commit c00fd99112
3 changed files with 9 additions and 12 deletions

View file

@ -226,7 +226,7 @@ let
} }
{ {
# The substring guard has to work with the collector off too. # The substring guard has to work with the collector off too.
# `h1-agent` mints exactly the client id hive `h1`'s agents present. # `h1-agent` would give the hive a client id the responder refuses.
name = "a hive name containing a composed-identifier word is refused, with the collector off"; name = "a hive name containing a composed-identifier word is refused, with the collector off";
ok = fragmentGuardFired hiveNameWithComposedWord; ok = fragmentGuardFired hiveNameWithComposedWord;
} }

View file

@ -10,7 +10,7 @@
# auth-callout responder strips to decide which hive a connection is. # auth-callout responder strips to decide which hive a connection is.
"hive" "hive"
# `hive-<name>-agent` — an id the queue's responder refuses. A hive named # `hive-<name>-agent` — an id the queue's responder refuses. A hive named
# `foo-agent` would mint exactly that id for itself. # `foo-agent` would get a client id the responder refuses.
"agent" "agent"
# Also an exact-match entry next door, for the collector's `<kind>/<owner>` # Also an exact-match entry next door, for the collector's `<kind>/<owner>`
# components. Here because it is the word this swarm composes identifiers # components. Here because it is the word this swarm composes identifiers

View file

@ -444,16 +444,13 @@ impl Policy {
/// suffix stripped as well, so `hive-foo-agent` answers `foo`. Two more on /// suffix stripped as well, so `hive-foo-agent` answers `foo`. Two more on
/// top: /// top:
/// ///
/// - The agent client is minted per **hive**, so this answers *whose /// - The id carries the hive and never the agent, so this answers *whose
/// agents*, never *which agent*. Two agents on one hive are /// agents*, never *which agent*.
/// indistinguishable here — not a gap in the parsing but the identity /// - A hive genuinely named `foo-agent` has the client id `hive-foo-agent`,
/// itself, which does not carry the agent. /// which this reads as hive `foo`'s agent client, an id the responder
/// - A hive genuinely named `foo-agent` mints `hive-foo-agent` and is /// refuses. Unguardable from inside this responder, which has no roster
/// therefore **indistinguishable from hive `foo`'s agents** right here. /// (see [`Self::hive_name`]) — `swarm-authelia.nix` asserts it at eval,
/// Unguardable from inside this responder, which has no roster (see /// where the roster is known, so the deployment fails to build.
/// [`Self::hive_name`]) — `swarm-authelia.nix` asserts it at eval, where
/// the roster is known, so the deployment fails to build rather than
/// minting two principals with one id.
fn agent_hive<'a>(&self, client_id: &'a str) -> Option<&'a str> { fn agent_hive<'a>(&self, client_id: &'a str) -> Option<&'a str> {
client_id client_id
.strip_prefix(&self.hive_prefix)? .strip_prefix(&self.hive_prefix)?