From 7ada3a926497e0683d04048bbe910e503f8ae263 Mon Sep 17 00:00:00 2001 From: Aaron Chung Date: Fri, 20 Mar 2026 11:28:12 +0900 Subject: [PATCH 1/3] Pre-compile regex in Rule.java --- api/src/main/java/org/apache/cloudstack/acl/Rule.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/org/apache/cloudstack/acl/Rule.java b/api/src/main/java/org/apache/cloudstack/acl/Rule.java index a4ef7773f67b..5538553f76fc 100644 --- a/api/src/main/java/org/apache/cloudstack/acl/Rule.java +++ b/api/src/main/java/org/apache/cloudstack/acl/Rule.java @@ -25,16 +25,18 @@ public final class Rule { private final String rule; + private final Pattern compiledPattern; private final static Pattern ALLOWED_PATTERN = Pattern.compile("^[a-zA-Z0-9*]+$"); public Rule(final String rule) { validate(rule); this.rule = rule; + this.compiledPattern = Pattern.compile(rule.toLowerCase().replace("*", "\\w*")); } public boolean matches(final String commandName) { return StringUtils.isNotEmpty(commandName) - && commandName.toLowerCase().matches(rule.toLowerCase().replace("*", "\\w*")); + && compiledPattern.matcher(commandName.toLowerCase()).matches(); } public String getRuleString() { From 4a6e47b51daa4d32afcde41700c7fdfbae40f0f5 Mon Sep 17 00:00:00 2001 From: Aaron Chung Date: Tue, 5 May 2026 22:34:25 -0700 Subject: [PATCH 2/3] Update api/src/main/java/org/apache/cloudstack/acl/Rule.java Co-authored-by: Suresh Kumar Anaparti --- api/src/main/java/org/apache/cloudstack/acl/Rule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/org/apache/cloudstack/acl/Rule.java b/api/src/main/java/org/apache/cloudstack/acl/Rule.java index 5538553f76fc..70da82dcd4e3 100644 --- a/api/src/main/java/org/apache/cloudstack/acl/Rule.java +++ b/api/src/main/java/org/apache/cloudstack/acl/Rule.java @@ -31,7 +31,7 @@ public final class Rule { public Rule(final String rule) { validate(rule); this.rule = rule; - this.compiledPattern = Pattern.compile(rule.toLowerCase().replace("*", "\\w*")); + this.compiledPattern = Pattern.compile(rule.replace("*", "\\w*"), Pattern.CASE_INSENSITIVE); } public boolean matches(final String commandName) { From 0e7640e31792ff64b17ac6969b85e268655a4d80 Mon Sep 17 00:00:00 2001 From: Aaron Chung Date: Tue, 5 May 2026 22:34:33 -0700 Subject: [PATCH 3/3] Update api/src/main/java/org/apache/cloudstack/acl/Rule.java Co-authored-by: Suresh Kumar Anaparti --- api/src/main/java/org/apache/cloudstack/acl/Rule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/org/apache/cloudstack/acl/Rule.java b/api/src/main/java/org/apache/cloudstack/acl/Rule.java index 70da82dcd4e3..de64d855ccc1 100644 --- a/api/src/main/java/org/apache/cloudstack/acl/Rule.java +++ b/api/src/main/java/org/apache/cloudstack/acl/Rule.java @@ -36,7 +36,7 @@ public Rule(final String rule) { public boolean matches(final String commandName) { return StringUtils.isNotEmpty(commandName) - && compiledPattern.matcher(commandName.toLowerCase()).matches(); + && compiledPattern.matcher(commandName).matches(); } public String getRuleString() {