juergen     2004/03/18 08:32:47

  Modified:    proposals/wvcm/src/org/apache/wvcm/store/webdav/response
                        AccessControlElementFactory.java
                        MultistatusResponse.java
  Log:
  work around for a server problem: in some cases ACE are marked as inherited, which 
are not in reality. Will be fixed in the server soon.
  
  Revision  Changes    Path
  1.2       +22 -19    
jakarta-slide/proposals/wvcm/src/org/apache/wvcm/store/webdav/response/AccessControlElementFactory.java
  
  Index: AccessControlElementFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/wvcm/src/org/apache/wvcm/store/webdav/response/AccessControlElementFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AccessControlElementFactory.java  8 Dec 2003 17:14:23 -0000       1.1
  +++ AccessControlElementFactory.java  18 Mar 2004 16:32:46 -0000      1.2
  @@ -86,21 +86,23 @@
    * @version $Revision$
    */
   public class AccessControlElementFactory {
  -    
  +
       private static Namespace dnsp = Namespace.getNamespace("d", "DAV:");
  -    
  +
       private Provider provider;
       private List accessControlList;
  -    
  -    public AccessControlElementFactory(Provider provider) {
  +    private Location location;
  +
  +    public AccessControlElementFactory(Provider provider, Location location) {
           this.provider = provider;
           this.accessControlList = new ArrayList();
  +        this.location = location;
       }
  -    
  +
       public List getAccessControlList() {
           return accessControlList;
       }
  -    
  +
       /**
        * Create List of AccessControlElement instances from DAV:acl property included
        * in this multistatus response.
  @@ -116,11 +118,11 @@
           Principal principal = null;
           List privileges = new ArrayList();
           boolean grant = true;
  -        
  +
           // get the principal
           Element principalElm = aceElm.getChild("principal", dnsp);
           principal = createPrincipal(principalElm);
  -        
  +
           // get the privileges
           Location privilegesLocation = 
((ProviderImpl)provider).serverPrivilegesLocation();
           XPathWrapper xp = new XPathWrapper( "d:grant/d:privilege/*", dnsp );
  @@ -144,25 +146,26 @@
                   }
               }
           }
  -        
  +
           // create the ACE
           AccessControlElement ace = new AccessControlElement(principal, privileges, 
grant);
  -        
  +
           // check inheritance
           xp = new XPathWrapper( "d:inherited/d:href", dnsp );
           Element hrefElm = (Element)xp.selectSingleNode(aceElm);
           if (hrefElm != null) {
  -            if (!includeInherited) {
  -                // skip this ACE because it's inherited
  -                return;
  -            }
               LocationImpl l = (LocationImpl)provider.location( hrefElm.getText() );
  -            ace.setInheritedFrom( l.resource(ResourceImpl.class) );
  +            if (!includeInherited && !this.location.equals(l)) {
  +                return;   // skip this ACE because it's inherited
  +            }
  +            if (!this.location.equals(l)) {
  +                ace.setInheritedFrom( l.resource(ResourceImpl.class) );
  +            }
           }
  -        
  +
           accessControlList.add( ace );
       }
  -    
  +
       private Principal createPrincipal(Element principalElm) throws WvcmException {
           Principal principal = null;
           if (principalElm != null) {
  
  
  
  1.2       +17 -17    
jakarta-slide/proposals/wvcm/src/org/apache/wvcm/store/webdav/response/MultistatusResponse.java
  
  Index: MultistatusResponse.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/wvcm/src/org/apache/wvcm/store/webdav/response/MultistatusResponse.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MultistatusResponse.java  8 Dec 2003 17:14:23 -0000       1.1
  +++ MultistatusResponse.java  18 Mar 2004 16:32:46 -0000      1.2
  @@ -81,18 +81,18 @@
    * @version $Revision$
    */
   public class MultistatusResponse extends AbstractResponse {
  -    
  +
       private ResourceProxyFactory proxyFactory;
       private AccessControlElementFactory aceFactory;
       private PropertyNameList wantedPropertyList;
  -    
  +
       /**
        * Create handler from given input stream.
        */
       public MultistatusResponse(Resource resource, InputStream respBodyAsStream) 
throws WvcmException {
           this(resource, respBodyAsStream, null);
       }
  -    
  +
       /**
        * Create handler from given input stream.
        */
  @@ -101,14 +101,14 @@
           try {
               this.wantedPropertyList = wantedPropertyList;
               this.proxyFactory = new ResourceProxyFactory(requestResource, provider, 
wantedPropertyList);
  -            this.aceFactory = new AccessControlElementFactory(provider);
  +            this.aceFactory = new AccessControlElementFactory(provider, 
resource.location());
           }
           catch( Exception e ) {
               throw new WvcmException( "Could not parse server response",
                                       resource.location().string(), 
ReasonCode.READ_FAILED, new Exception[]{e} );
           }
       }
  -    
  +
       /**
        * Create the resource proxy resulting from the 1st response of this 
multistatus response.
        *
  @@ -122,7 +122,7 @@
           else
               return null;
       }
  -    
  +
       /**
        * Create the resource proxies resulting from this multistatus response.
        *
  @@ -132,7 +132,7 @@
       public List createResourceProxies() throws WvcmException {
           return createResourceProxies( null, false );
       }
  -    
  +
       /**
        * Create the resource proxies resulting from this multistatus response.
        *
  @@ -143,7 +143,7 @@
       public List createResourceProxies( boolean excludeRequestResource ) throws 
WvcmException {
           return createResourceProxies( null, excludeRequestResource );
       }
  -    
  +
       /**
        * Create List of AccessControlElement instances from DAV:acl property included
        * in this multistatus response.
  @@ -160,7 +160,7 @@
           Element ms = respBodyDoc.getRootElement();
           XPathWrapper xp = new XPathWrapper(
               
"d:response/d:propstat[contains(string(d:status),\"200\")]/d:prop/d:acl/*", dnsp );
  -        
  +
           Iterator i = xp.selectNodes(ms).iterator();
           while (i.hasNext()) {
               Element aceElm = (Element)i.next();
  @@ -168,7 +168,7 @@
           }
           return aceFactory.getAccessControlList();
       }
  -    
  +
       /**
        * Create the resource proxies resulting from this multistatus response.
        *
  @@ -181,7 +181,7 @@
           List result = new ArrayList();
           Element ms = respBodyDoc.getRootElement();
           XPathWrapper xp = new XPathWrapper( "d:response", dnsp );
  -        
  +
           Iterator i = xp.selectNodes(ms).iterator();
           // iterate over <response> element list
           while( i.hasNext() ) {
  @@ -194,7 +194,7 @@
           }
           return result;
       }
  -    
  +
       /**
        * Create the resource proxy resulting from the 1st response of this 
multistatus response.
        *
  @@ -204,7 +204,7 @@
       public Resource createAllAttributesProxy() throws WvcmException {
           Element ms = respBodyDoc.getRootElement();
           XPathWrapper xp = new XPathWrapper( "d:response", dnsp );
  -        
  +
           Element re = (Element)xp.selectSingleNode(ms);
           return proxyFactory.createAllAttributes(re);
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to