5
0
mirror of git://git.proxmox.com/git/proxmox-backup.git synced 2025-02-03 13:47:18 +03:00

config: re-enable efficient mixed acl path/slice support

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Thomas Lamprecht 2022-06-08 14:01:53 +02:00
parent d8ec2a25ba
commit 2d7ec3578b

View File

@ -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) {
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) {
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<Vec<String>, 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)?;
}