diff --git a/pbs-config/src/acl.rs b/pbs-config/src/acl.rs index 80d2ae17..6bbb319e 100644 --- a/pbs-config/src/acl.rs +++ b/pbs-config/src/acl.rs @@ -336,30 +336,36 @@ impl AclTree { fn get_node(&self, path: &[&str]) -> Option<&AclTreeNode> { let mut node = &self.root; - for comp in path { - node = match node.children.get(*comp) { - Some(n) => n, - None => return None, - }; + for outer in path { + for comp in outer.split("/") { + node = match node.children.get(comp) { + Some(n) => n, + None => return None, + }; + } } Some(node) } fn get_node_mut(&mut self, path: &[&str]) -> Option<&mut AclTreeNode> { let mut node = &mut self.root; - for comp in path { - node = match node.children.get_mut(*comp) { - Some(n) => n, - None => return None, - }; + for outer in path { + for comp in outer.split("/") { + node = match node.children.get_mut(comp) { + Some(n) => n, + None => return None, + }; + } } Some(node) } fn get_or_insert_node(&mut self, path: &[&str]) -> &mut AclTreeNode { let mut node = &mut self.root; - for comp in path { - node = node.children.entry(String::from(*comp)).or_default(); + for outer in path { + for comp in outer.split("/") { + node = node.children.entry(String::from(comp)).or_default(); + } } node } @@ -658,11 +664,10 @@ impl AclTree { } pub fn get_child_paths(&self, auth_id: &Authid, path: &[&str]) -> Result, Error> { - let path = path.join("/"); - let mut res = Vec::new(); - if let Some(node) = self.get_node(&split_acl_path(&path)) { + if let Some(node) = self.get_node(&path) { + let path = path.join("/"); node.get_child_paths(path, auth_id, &mut res)?; }