diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/PrepRequestProcessor.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/PrepRequestProcessor.java index 4e52ca4a09b..7b880904b67 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/PrepRequestProcessor.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/PrepRequestProcessor.java @@ -551,7 +551,7 @@ protected void pRequest2Txn(int type, long zxid, Request request, Record record) SetACLRequest setAclRequest = (SetACLRequest) record; path = setAclRequest.getPath(); validatePath(path, request.sessionId); - List listACL = fixupACL(path, request.authInfo, setAclRequest.getAcl()); + List listACL = fixupACL(path, request.sessionId, request.authInfo, setAclRequest.getAcl()); nodeRecord = getRecordForPath(path); zks.checkACL(request.cnxn, nodeRecord.acl, ZooDefs.Perms.ADMIN, request.authInfo, path, listACL); newVersion = checkAndIncVersion(nodeRecord.stat.getAversion(), setAclRequest.getVersion(), path); @@ -661,7 +661,7 @@ private void pRequest2TxnCreate(int type, Request request, Record record) throws validateCreateRequest(path, createMode, request, ttl); String parentPath = validatePathForCreate(path, request.sessionId); - List listACL = fixupACL(path, request.authInfo, acl); + List listACL = fixupACL(path, request.sessionId, request.authInfo, acl); ChangeRecord parentRecord = getRecordForPath(parentPath); zks.checkACL(request.cnxn, parentRecord.acl, ZooDefs.Perms.CREATE, request.authInfo, path, listACL); @@ -957,12 +957,16 @@ private void validateCreateRequest(String path, CreateMode createMode, Request r } } - private List fixupACL(String path, List authInfo, List acls) throws KeeperException.InvalidACLException { + private List fixupACL(String path, long sessionId, List authInfo, List acls) throws KeeperException.InvalidACLException { FixupContext context = new FixupContext() { public String getPath() { return path; } + public long getSessionId() { + return sessionId; + } + public List getAuthInfo() { return authInfo; } diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java index 929744ef10d..3f437a38cf4 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java @@ -2315,7 +2315,7 @@ private String effectiveACLPath(Request request) throws KeeperException.BadArgum * we only care about it being well-formed (and if it isn't, an * exception will be raised). */ - ACLs.fixupACL(path, request.authInfo, acl); + ACLs.fixupACL(path, request.sessionId, request.authInfo, acl); } return path; diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/acl/ACLs.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/acl/ACLs.java index c079e163127..d9f669159d9 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/acl/ACLs.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/acl/ACLs.java @@ -129,12 +129,16 @@ public static void initialize() throws InitializationException { * @return verified and expanded ACLs * @throws KeeperException.InvalidACLException */ - public static List fixupACL(String path, List authInfo, List acls) throws KeeperException.InvalidACLException { + public static List fixupACL(String path, long sessionId, List authInfo, List acls) throws KeeperException.InvalidACLException { FixupContext context = new FixupContext() { public String getPath() { return path; } + public long getSessionId() { + return sessionId; + } + public List getAuthInfo() { return authInfo; } diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/acl/FixupContext.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/acl/FixupContext.java index 0c80f1a2bf0..497a20afcd2 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/acl/FixupContext.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/acl/FixupContext.java @@ -25,6 +25,8 @@ public interface FixupContext { String getPath(); + long getSessionId(); + List getAuthInfo(); byte[] loadConstraints() diff --git a/zookeeper-server/src/test/java/org/apache/zookeeper/server/acl/ConstraintBasedFixup4Test.java b/zookeeper-server/src/test/java/org/apache/zookeeper/server/acl/ConstraintBasedFixup4Test.java index ceffb5e896a..9f798d5de63 100644 --- a/zookeeper-server/src/test/java/org/apache/zookeeper/server/acl/ConstraintBasedFixup4Test.java +++ b/zookeeper-server/src/test/java/org/apache/zookeeper/server/acl/ConstraintBasedFixup4Test.java @@ -66,6 +66,10 @@ public String getPath() { return path; } + public long getSessionId() { + return -1; + } + public List getAuthInfo() { return ids; }