From af3780cefc29ac16d1b39d6c9dc84ce6744b23df Mon Sep 17 00:00:00 2001 From: Andor Molnar Date: Wed, 29 Oct 2025 11:14:13 -0500 Subject: [PATCH 1/2] ZOOKEEPER-4988. Add -R recursive option to getAcl command --- .../apache/zookeeper/cli/GetAclCommand.java | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/cli/GetAclCommand.java b/zookeeper-server/src/main/java/org/apache/zookeeper/cli/GetAclCommand.java index 0ecdc9ec6bc..43d70ce1571 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/cli/GetAclCommand.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/cli/GetAclCommand.java @@ -38,10 +38,11 @@ public class GetAclCommand extends CliCommand { static { options.addOption("s", false, "stats"); + options.addOption("R", false, "recursive"); } public GetAclCommand() { - super("getAcl", "[-s] path"); + super("getAcl", "[-s] [-R] path"); } @Override @@ -65,14 +66,32 @@ public boolean exec() throws CliException { String path = args[1]; Stat stat = new Stat(); List acl; + boolean recursive = cl.hasOption("R"); try { - acl = zk.getACL(path, stat); + if (recursive) { + ZKUtil.visitSubTreeDFS(zk, path, false, (rc, path1, ctx, name) -> + { + try { + out.println(path1); + printAcl(zk.getACL(path1, stat), stat); + } catch (KeeperException | InterruptedException e) { + throw new RuntimeException(e); + } + }); + } else { + acl = zk.getACL(path, stat); + printAcl(acl, stat); + } } catch (IllegalArgumentException ex) { throw new MalformedPathException(ex.getMessage()); } catch (KeeperException | InterruptedException ex) { throw new CliWrapperException(ex); } + return false; + } + + private void printAcl(List acl, Stat stat) { for (ACL a : acl) { out.println(a.getId() + ": " + ZKUtil.getPermString(a.getPerms())); } @@ -80,6 +99,5 @@ public boolean exec() throws CliException { if (cl.hasOption("s")) { new StatPrinter(out).print(stat); } - return false; } } From 4c3e200c7344dd3c81d53025be1ca56623d14a65 Mon Sep 17 00:00:00 2001 From: Andor Molnar Date: Wed, 29 Oct 2025 12:10:09 -0500 Subject: [PATCH 2/2] ZOOKEEPER-4988. Checkstyle fix --- .../src/main/java/org/apache/zookeeper/cli/GetAclCommand.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/cli/GetAclCommand.java b/zookeeper-server/src/main/java/org/apache/zookeeper/cli/GetAclCommand.java index 43d70ce1571..1ff5bd0664b 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/cli/GetAclCommand.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/cli/GetAclCommand.java @@ -69,8 +69,7 @@ public boolean exec() throws CliException { boolean recursive = cl.hasOption("R"); try { if (recursive) { - ZKUtil.visitSubTreeDFS(zk, path, false, (rc, path1, ctx, name) -> - { + ZKUtil.visitSubTreeDFS(zk, path, false, (rc, path1, ctx, name) -> { try { out.println(path1); printAcl(zk.getACL(path1, stat), stat);