You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by re...@apache.org on 2001/06/09 02:14:53 UTC

cvs commit: jakarta-slide/src/webdav/server/org/apache/slide/webdav/method AclMethod.java

remm        01/06/08 17:14:53

  Modified:    src/webdav/server/org/apache/slide/webdav/method
                        AclMethod.java
  Log:
  - new constant PRIVILEGE_REMOVE_REVISION_CONTENT
  - ACL Element is the root element of request
  - gant xor deny
  - the privileges are inside grant/deny
  - error msg improvements
  
  Patch submitted by Dirk Verbeeck <dirk.verbeeck at the-ecorp.com>
  
  Revision  Changes    Path
  1.4       +40 -33    jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AclMethod.java
  
  Index: AclMethod.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AclMethod.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AclMethod.java	2001/05/16 12:07:50	1.3
  +++ AclMethod.java	2001/06/09 00:14:53	1.4
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AclMethod.java,v 1.3 2001/05/16 12:07:50 juergen Exp $
  - * $Revision: 1.3 $
  - * $Date: 2001/05/16 12:07:50 $
  + * $Header: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AclMethod.java,v 1.4 2001/06/09 00:14:53 remm Exp $
  + * $Revision: 1.4 $
  + * $Date: 2001/06/09 00:14:53 $
    *
    * ====================================================================
    *
  @@ -88,6 +88,7 @@
    * ACL method.
    *
    * @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
  + * @author Dirk Verbeeck
    */
   public class AclMethod extends WebdavMethod {
       
  @@ -110,10 +111,11 @@
       protected static final int PRIVILEGE_REMOVE_REVISION_METADATA = 12;
       protected static final int PRIVILEGE_CREATE_REVISION_CONTENT = 13;
       protected static final int PRIVILEGE_MODIFY_REVISION_CONTENT = 14;
  -    protected static final int PRIVILEGE_READ_ACL = 15;
  -    protected static final int PRIVILEGE_WRITE_ACL = 16;
  -    protected static final int PRIVILEGE_GRANT_PERMISSION = 17;
  -    protected static final int PRIVILEGE_REVOKE_PERMISSION = 18;
  +    protected static final int PRIVILEGE_REMOVE_REVISION_CONTENT = 15;
  +    protected static final int PRIVILEGE_READ_ACL = 16;
  +    protected static final int PRIVILEGE_WRITE_ACL = 17;
  +    protected static final int PRIVILEGE_GRANT_PERMISSION = 18;
  +    protected static final int PRIVILEGE_REVOKE_PERMISSION = 19;    
       
       
       // ----------------------------------------------------- Instance Variables
  @@ -178,20 +180,8 @@
                       (new StringReader(requestBody))));
                   
                   // Get the root element of the document
  -                Element rootElement = document.getDocumentElement();
  -                //NodeList childList = rootElement.getChildNodes();
  +                Element acl = document.getDocumentElement();
                   
  -                NodeList aclList = 
  -                    rootElement.getElementsByTagNameNS
  -                    (NodeProperty.DEFAULT_NAMESPACE, "acl");
  -                
  -                if (aclList.getLength() != 1) {
  -                    resp.setStatus(WebdavStatus.SC_BAD_REQUEST);
  -                    throw new WebdavException(WebdavStatus.SC_BAD_REQUEST);
  -                }
  -                
  -                Element acl = (Element) aclList.item(0);
  -                
                   NodeList aceList = acl.getElementsByTagNameNS
                       (NodeProperty.DEFAULT_NAMESPACE, "ace");
                   
  @@ -236,13 +226,8 @@
                       NodeList denyList = ace.getElementsByTagNameNS
                           (NodeProperty.DEFAULT_NAMESPACE, "deny");
                       
  -                    if ((grantList.getLength() > 0) && 
  -                        (denyList.getLength() > 0)) {
  -                        resp.setStatus(WebdavStatus.SC_BAD_REQUEST);
  -                        throw new WebdavException(WebdavStatus.SC_BAD_REQUEST);
  -                    }
  -                    if ((grantList.getLength() == 0) && 
  -                        (denyList.getLength() == 0)) {
  +                    // there must be only ONE grant or deny element
  +                    if ((grantList.getLength()+denyList.getLength())!=1) {
                           resp.setStatus(WebdavStatus.SC_BAD_REQUEST);
                           throw new WebdavException(WebdavStatus.SC_BAD_REQUEST);
                       }
  @@ -252,15 +237,19 @@
                       NodeList privilegeList = null;
                       
                       if (negative) {
  -                        privilegeList = denyList;
  +                        Element denyElement=(Element) denyList.item(0);
  +                        privilegeList = denyElement.getElementsByTagNameNS
  +                            (NodeProperty.DEFAULT_NAMESPACE, "privilege");
                       } else {
  -                        privilegeList = grantList;
  +                        Element grantElement=(Element) grantList.item(0);
  +                        privilegeList = grantElement.getElementsByTagNameNS
  +                            (NodeProperty.DEFAULT_NAMESPACE, "privilege");
                       }
                       
                       boolean inheritable = true; 
                       // FIXME : Use the very unofficial Advanced ACL spec here.
                       
  -                    for (int j = 0; i < privilegeList.getLength(); j++) {
  +                    for (int j = 0; j < privilegeList.getLength(); j++) {
                           
                           Element privilegeElement = 
                               (Element) privilegeList.item(j);
  @@ -378,13 +367,27 @@
                                    config.getRevokePermissionAction().getUri(), 
                                    negative, inheritable);
                               break;
  +                        default:
  +                           // FIXME: ignore the other permissions ???
  +                           // System.out.println("Error: Unknown internal privilege code !!!");
  +                           // resp.setStatus(WebdavStatus.SC_INTERNAL_SERVER_ERROR);
  +                           // throw new WebdavException(WebdavStatus.SC_INTERNAL_SERVER_ERROR);
                           }
  -                        
                       }
  -                    
                   }
  -                
  +            } catch (AbstractMethodError e) {
  +                System.err.println("You are using using an incorrect older parser");
  +                System.err.println("that doesn't provide Element::getElementsByTagNameNS");
  +                System.err.println("consult the documentation for a list of valid parsers.");
  +                System.err.println("You are currently using: ");
  +                System.err.println("   " + documentBuilder.getClass().getName());
  +                e.printStackTrace();
  +                resp.setStatus(WebdavStatus.SC_INTERNAL_SERVER_ERROR);
  +                throw new WebdavException(WebdavStatus.SC_INTERNAL_SERVER_ERROR);
               } catch (SAXException e) {
  +				System.err.println("Error parsing requestBody:");
  +                System.err.println(requestBody);
  +                e.printStackTrace();
                   resp.setStatus(WebdavStatus.SC_BAD_REQUEST);
                   throw new WebdavException(WebdavStatus.SC_BAD_REQUEST);
               } catch (IOException e) {
  @@ -529,12 +532,16 @@
                               "modify-revision-content")) {
               return PRIVILEGE_MODIFY_REVISION_CONTENT;
           } else if (hasChild(privilege, SLIDE_NAMESPACE, 
  +                            "remove-revision-content")) {
  +            return PRIVILEGE_REMOVE_REVISION_CONTENT;
  +        } else if (hasChild(privilege, SLIDE_NAMESPACE, 
                               "grant-permission")) {
               return PRIVILEGE_GRANT_PERMISSION;
           } else if (hasChild(privilege, SLIDE_NAMESPACE, 
                               "revoke-permission")) {
               return PRIVILEGE_REVOKE_PERMISSION;
           } else {
  +            System.err.println("Error: Unknown privilege !!!");
               throw new WebdavException(WebdavStatus.SC_BAD_REQUEST);
           }