Hello,
Is someone more familiar with following piece of code in LockImpl.java. For
following two locks (which should be compatible IMO) a false is returned.
This causes shared locks not to work correctly:
Scenario:
User1 possesses a shared write lock
User2 want to lock the same resource in shared mode ==> this lock
request is denied with 423.
private boolean isCompatible(SlideToken slideToken,
NodeLock
token1, NodeLock token2,
boolean
tryToLock) {
/*
System.out.println("**** Check lock ****");
System.out.println("Lock 1 : " + token1.getSubjectUri() +
" action "
+ token1.getTypeUri());
System.out.println("Lock 2 : " + token2.getSubjectUri() +
" on "
+ token2.getObjectUri() + " action "
+ token2.getTypeUri());
*/
boolean compatible = true;
// We first check whether or not the lock is still valid
if (token2.hasExpired()) {
// Since the lock has expired, it is removed
try {
Uri token2Uri = namespace.getUri(slideToken,
token2.getObjectUri());
token2Uri.getStore().removeLock(token2Uri,
token2);
} catch (SlideException e) {
e.printStackTrace();
}
} else {
// The lockTypes are not equal
boolean condition1 = (tryToLock)
&&
(token2.getTypeUri().equals(token1.getTypeUri()));
// The user tested is not parent of the token's user
boolean condition2 =
(token1.getSubjectUri().startsWith(token2.getSubjectUri()));
// The two lock types are the same
boolean condition3 = token2.getTypeUri()
.startsWith(token1.getTypeUri());
// The lockType is exclusive
boolean condition4 = token1.isExclusive();
// Was a proper lock token given out ?
boolean condition5 = checkLockToken(slideToken,
token2);
// Are lock tokens enforced ?
boolean condition6 =
slideToken.isEnforceLockTokens();
if ((condition1 && condition4)
|| (condition3 && !condition2 &&
!condition6)
|| (condition3 && !condition5 &&
condition6)) {
compatible = false;
}
System.out.println();
System.out.println("Token1 = " + token1);
System.out.println(" .getTypeUri = " +
token1.getTypeUri());
System.out.println(" .getSubjectUri = " +
token1.getSubjectUri());
System.out.println(" .getObjectUri = " +
token1.getObjectUri());
System.out.println(" .isExclusive = " +
token1.isExclusive());
System.out.println("Token2 = " + token1);
System.out.println(" .getTypeUri = " +
token2.getTypeUri());
System.out.println(" .getSubjectUri = " +
token2.getSubjectUri());
System.out.println(" .getObjectUri = " +
token2.getObjectUri());
System.out.println(" .isExclusive = " +
token2.isExclusive());
System.out.println("C1:" + condition1);
System.out.println("C2:" + condition2);
System.out.println("C3:" + condition3);
System.out.println("C4:" + condition4);
System.out.println("C5:" + condition5);
System.out.println("C6:" + condition6);
System.out.println("Compatible:" + compatible);
}
return compatible;
}
Token1 = org.apache.slide.lock.NodeLock@2a233f
.getTypeUri = /administration/security/actions/write
.getSubjectUri = /administration/security/users/localhost/2user1
.getObjectUri = /files31NT/test.xml
.isExclusive = false
Token2 = org.apache.slide.lock.NodeLock@2a233f
.getTypeUri = /administration/security/actions/write
.getSubjectUri = /administration/security/users/localhost/user1
.getObjectUri = /files31NT/test.xml
.isExclusive = false
C1:true
C2:false
C3:true
C4:false
C5:false
C6:true
Compatible:false
Best regards
Juergen
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>