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]>

Reply via email to