This is an automated email from the ASF dual-hosted git repository.

cmccabe pushed a commit to branch 3.8
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/3.8 by this push:
     new e749b571953 KAFKA-18051: Disallow creating ACLs with principals that 
do not contain a colon (#17883)
e749b571953 is described below

commit e749b57195328862b779056f07124083c383e45d
Author: Colin Patrick McCabe <[email protected]>
AuthorDate: Fri Nov 22 16:50:33 2024 -0800

    KAFKA-18051: Disallow creating ACLs with principals that do not contain a 
colon (#17883)
    
    Kafka Principals must contain a colon. We should enforce this in createAcls.
    
    Reviewers: David Arthur <[email protected]>
---
 .../apache/kafka/controller/AclControlManager.java |  6 +++++
 .../kafka/controller/AclControlManagerTest.java    | 28 ++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git 
a/metadata/src/main/java/org/apache/kafka/controller/AclControlManager.java 
b/metadata/src/main/java/org/apache/kafka/controller/AclControlManager.java
index 3e1804cf43c..f849b540a57 100644
--- a/metadata/src/main/java/org/apache/kafka/controller/AclControlManager.java
+++ b/metadata/src/main/java/org/apache/kafka/controller/AclControlManager.java
@@ -159,6 +159,12 @@ public class AclControlManager {
         if (binding.pattern().name() == null || 
binding.pattern().name().isEmpty()) {
             throw new InvalidRequestException("Resource name should not be 
empty");
         }
+        int colonIndex = binding.entry().principal().indexOf(":");
+        if (colonIndex == -1) {
+            throw new InvalidRequestException("Could not parse principal from 
`" +
+                binding.entry().principal() + "` " + "(no colon is present 
separating the " +
+                "principal type from the principal name)");
+        }
     }
 
     ControllerResult<List<AclDeleteResult>> deleteAcls(List<AclBindingFilter> 
filters) {
diff --git 
a/metadata/src/test/java/org/apache/kafka/controller/AclControlManagerTest.java 
b/metadata/src/test/java/org/apache/kafka/controller/AclControlManagerTest.java
index dd6c2d15185..a62b9f00d6d 100644
--- 
a/metadata/src/test/java/org/apache/kafka/controller/AclControlManagerTest.java
+++ 
b/metadata/src/test/java/org/apache/kafka/controller/AclControlManagerTest.java
@@ -113,6 +113,34 @@ public class AclControlManagerTest {
                 getMessage());
     }
 
+    /**
+     * Verify that validateNewAcl catches invalid ACLs with principals that do 
not contain a colon.
+     */
+    @Test
+    public void testValidateAclWithBadPrincipal() {
+        assertEquals("Could not parse principal from `invalid` (no colon is 
present " +
+                "separating the principal type from the principal name)",
+            assertThrows(InvalidRequestException.class, () ->
+                AclControlManager.validateNewAcl(new AclBinding(
+                    new ResourcePattern(TOPIC, "*", LITERAL),
+                    new AccessControlEntry("invalid", "*", ALTER, ALLOW)))).
+                getMessage());
+    }
+
+    /**
+     * Verify that validateNewAcl catches invalid ACLs with principals that do 
not contain a colon.
+     */
+    @Test
+    public void testValidateAclWithEmptyPrincipal() {
+        assertEquals("Could not parse principal from `` (no colon is present " 
+
+                "separating the principal type from the principal name)",
+            assertThrows(InvalidRequestException.class, () ->
+                AclControlManager.validateNewAcl(new AclBinding(
+                    new ResourcePattern(TOPIC, "*", LITERAL),
+                    new AccessControlEntry("", "*", ALTER, ALLOW)))).
+                        getMessage());
+    }
+
     /**
      * Verify that validateFilter catches invalid filters.
      */

Reply via email to