dirkv 01/07/18 06:18:18
Modified: src/webdav/server/org/apache/slide/webdav/method
PropFindMethod.java
Log:
combine multiple privileges into one ACE
Revision Changes Path
1.29 +95 -64
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PropFindMethod.java
Index: PropFindMethod.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PropFindMethod.java,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- PropFindMethod.java 2001/07/13 10:51:31 1.28
+++ PropFindMethod.java 2001/07/18 13:18:18 1.29
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PropFindMethod.java,v
1.28 2001/07/13 10:51:31 dirkv Exp $
- * $Revision: 1.28 $
- * $Date: 2001/07/13 10:51:31 $
+ * $Header:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PropFindMethod.java,v
1.29 2001/07/18 13:18:18 dirkv Exp $
+ * $Revision: 1.29 $
+ * $Date: 2001/07/18 13:18:18 $
*
* ====================================================================
*
@@ -1290,95 +1290,126 @@
ObjectNode current = object;
boolean inheritedPermissions = false;
-
+ Vector permissions = new Vector();
+
while (current != null) {
try {
-
- Enumeration aclList = security.enumeratePermissions
- (slideToken, current);
-
+ // put all permissions in a list
+ permissions.clear();
+ Enumeration aclList = security.enumeratePermissions(slideToken,
current);
while (aclList.hasMoreElements()) {
- NodePermission permission = (NodePermission)
- aclList.nextElement();
+ NodePermission permission = (NodePermission)
aclList.nextElement();
// if we are processing inheritedPermissions (from parent and
up)
// then the permission should be inheritable
if (inheritedPermissions && !permission.isInheritable()) {
- // continue with next permission
- continue;
+ // continue with next permission
+ continue;
}
-
- String principal = permission.getSubjectUri();
-
- String action = permission.getActionUri();
+ permissions.add(permission);
+ }
+
+ // start combining and writing the permissions
+ while (permissions.size()>0) {
+
+ NodePermission permission = (NodePermission) permissions.get(0);
+ permissions.remove(0);
+ String principal = permission.getSubjectUri();
+ boolean negative = permission.isNegative();
+
+ String action = permission.getActionUri();
+
// read
- boolean isReadObject = readObjectUri.startsWith(action);
- boolean isReadLocks = readLocksUri.startsWith(action);
- boolean isReadRevisionMetadata =
- readRevisionMetadataUri.startsWith(action);
- boolean isReadRevisionContent =
- readRevisionContentUri.startsWith(action);
-
- boolean isRead = isReadObject && isReadLocks
- && isReadRevisionMetadata &&
isReadRevisionContent;
+ boolean isReadObject =
readObjectUri.startsWith(action);
+ boolean isReadLocks =
readLocksUri.startsWith(action);
+ boolean isReadRevisionMetadata =
readRevisionMetadataUri.startsWith(action);
+ boolean isReadRevisionContent =
readRevisionContentUri.startsWith(action);
// write
- boolean isCreateObject =
- createObjectUri.startsWith(action);
- boolean isRemoveObject =
- removeObjectUri.startsWith(action);
- boolean isLockObject = lockObjectUri.startsWith(action);
- boolean isCreateRevisionMetadata =
- createRevisionMetadataUri.startsWith(action);
- boolean isModifyRevisionMetadata =
- modifyRevisionMetadataUri.startsWith(action);
- boolean isRemoveRevisionMetadata =
- removeRevisionMetadataUri.startsWith(action);
- boolean isCreateRevisionContent =
- createRevisionContentUri.startsWith(action);
- boolean isModifyRevisionContent =
- modifyRevisionContentUri.startsWith(action);
- boolean isRemoveRevisionContent =
- removeRevisionContentUri.startsWith(action);
-
- boolean isWrite = isCreateObject && isRemoveObject
- && isLockObject
- && isCreateRevisionMetadata
- && isModifyRevisionMetadata && isRemoveRevisionMetadata
- && isCreateRevisionContent && isModifyRevisionContent
- && isRemoveRevisionContent;
+ boolean isCreateObject =
createObjectUri.startsWith(action);
+ boolean isRemoveObject =
removeObjectUri.startsWith(action);
+ boolean isLockObject =
lockObjectUri.startsWith(action);
+ boolean isCreateRevisionMetadata =
createRevisionMetadataUri.startsWith(action);
+ boolean isModifyRevisionMetadata =
modifyRevisionMetadataUri.startsWith(action);
+ boolean isRemoveRevisionMetadata =
removeRevisionMetadataUri.startsWith(action);
+ boolean isCreateRevisionContent =
createRevisionContentUri.startsWith(action);
+ boolean isModifyRevisionContent =
modifyRevisionContentUri.startsWith(action);
+ boolean isRemoveRevisionContent =
removeRevisionContentUri.startsWith(action);
//read-acl
- boolean isReadPermissions =
- readPermissionsUri.startsWith(action);
+ boolean isReadPermissions =
readPermissionsUri.startsWith(action);
+
+ // write-acl
+ boolean isGrantPermission =
grantPermissionUri.startsWith(action);
+ boolean isRevokePermission =
revokePermissionUri.startsWith(action);
+
+ // check the other permissions to combine them
+ // (if they are for the same principal/negative)
+ for (int i=0; i<permissions.size() ; i++)
+ {
+ NodePermission otherPermission = (NodePermission)
permissions.get(i);
+ if (principal.equals(otherPermission.getSubjectUri()) &&
(negative==otherPermission.isNegative()))
+ {
+ permissions.remove(i);
+ i--; // because we removed the current one
+
+ action = otherPermission.getActionUri();
+
+ // read
+ isReadObject |=
readObjectUri.startsWith(action);
+ isReadLocks |=
readLocksUri.startsWith(action);
+ isReadRevisionMetadata |=
readRevisionMetadataUri.startsWith(action);
+ isReadRevisionContent |=
readRevisionContentUri.startsWith(action);
+
+ // write
+ isCreateObject |=
createObjectUri.startsWith(action);
+ isRemoveObject |=
removeObjectUri.startsWith(action);
+ isLockObject |=
lockObjectUri.startsWith(action);
+ isCreateRevisionMetadata |=
createRevisionMetadataUri.startsWith(action);
+ isModifyRevisionMetadata |=
modifyRevisionMetadataUri.startsWith(action);
+ isRemoveRevisionMetadata |=
removeRevisionMetadataUri.startsWith(action);
+ isCreateRevisionContent |=
createRevisionContentUri.startsWith(action);
+ isModifyRevisionContent |=
modifyRevisionContentUri.startsWith(action);
+ isRemoveRevisionContent |=
removeRevisionContentUri.startsWith(action);
+
+ //read-acl
+ isReadPermissions |=
readPermissionsUri.startsWith(action);
+
+ // write-acl
+ isGrantPermission |=
grantPermissionUri.startsWith(action);
+ isRevokePermission |=
revokePermissionUri.startsWith(action);
+ }
+ }
+ // WebDAV privileges
+ boolean isRead = isReadObject && isReadLocks &&
+ isReadRevisionMetadata &&
isReadRevisionContent;
+
+ boolean isWrite = isCreateObject && isRemoveObject &&
isLockObject &&
+ isCreateRevisionMetadata &&
isModifyRevisionMetadata &&
+ isRemoveRevisionMetadata &&
+ isCreateRevisionContent &&
isModifyRevisionContent &&
+ isRemoveRevisionContent;
+
boolean isReadAcl = isReadPermissions;
- // write-acl
- boolean isGrantPermission =
- grantPermissionUri.startsWith(action);
- boolean isRevokePermission =
- revokePermissionUri.startsWith(action);
+ boolean isWriteAcl = isGrantPermission && isRevokePermission;
- boolean isWriteAcl =
- isGrantPermission && isRevokePermission;
+ boolean isAll = isRead && isWrite && isReadAcl && isWriteAcl;
- boolean isAll = isRead && isWrite && isReadAcl
- && isWriteAcl;
+ // start generating XML
generatedXML.writeElement(null, ACE, XMLPrinter.OPENING);
writePrincipal(generatedXML, principal);
if (permission.isNegative()) {
- generatedXML.writeElement(null, DENY,
- XMLPrinter.OPENING);
+ generatedXML.writeElement(null, DENY, XMLPrinter.OPENING);
} else {
- generatedXML.writeElement(null, GRANT,
- XMLPrinter.OPENING);
+ generatedXML.writeElement(null, GRANT, XMLPrinter.OPENING);
}
if (isAll) {