aboutsummaryrefslogtreecommitdiffstats
path: root/src/access
diff options
context:
space:
mode:
Diffstat (limited to 'src/access')
-rw-r--r--src/access/strict.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/access/strict.rs b/src/access/strict.rs
index f5051a8..0fa6577 100644
--- a/src/access/strict.rs
+++ b/src/access/strict.rs
@@ -140,6 +140,15 @@ pub(crate) fn read(text: &str) -> Result<Manifest, String> {
if manifest.policy.get("values").and_then(JsonValue::as_str) != Some("signed") {
return Err("its policy isn't strict (\"values\": \"signed\")".to_owned());
}
+ // A strict swarm without a registry would let every member do anything.
+ let users = crate::access::registry::users_dir();
+ if !manifest
+ .keep
+ .iter()
+ .any(|kept| kept.path.len() == users.len() + 1 && kept.path.starts_with(&users))
+ {
+ return Err("it keeps no user".to_owned());
+ }
Ok(manifest)
}