From: Wolfgang M. M. <wol...@us...> - 2004-07-02 16:54:33
|
Update of /cvsroot/exist/eXist-1.0/src/org/exist/xmldb In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15785/src/org/exist/xmldb Modified Files: LocalCollection.java LocalUserManagementService.java LocalCollectionManagementService.java LocalXMLResource.java DatabaseImpl.java LocalBinaryResource.java LocalXUpdateQueryService.java LocalXPathQueryService.java Log Message: Fixed resource read/write permissions check. Index: LocalCollectionManagementService.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xmldb/LocalCollectionManagementService.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** LocalCollectionManagementService.java 21 Jun 2004 15:27:36 -0000 1.11 --- LocalCollectionManagementService.java 2 Jul 2004 16:53:53 -0000 1.12 *************** *** 25,28 **** --- 25,29 ---- import org.exist.EXistException; import org.exist.dom.DocumentImpl; + import org.exist.security.Permission; import org.exist.security.PermissionDeniedException; import org.exist.security.User; Index: LocalBinaryResource.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xmldb/LocalBinaryResource.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** LocalBinaryResource.java 29 Jan 2004 15:06:43 -0000 1.2 --- LocalBinaryResource.java 2 Jul 2004 16:53:53 -0000 1.3 *************** *** 32,40 **** import org.exist.EXistException; import org.exist.dom.BinaryDocument; import org.exist.security.Permission; - import org.exist.security.PermissionDeniedException; import org.exist.security.User; import org.exist.storage.BrokerPool; import org.exist.storage.DBBroker; import org.xmldb.api.base.Collection; import org.xmldb.api.base.ErrorCodes; --- 32,41 ---- import org.exist.EXistException; import org.exist.dom.BinaryDocument; + import org.exist.dom.DocumentImpl; import org.exist.security.Permission; import org.exist.security.User; import org.exist.storage.BrokerPool; import org.exist.storage.DBBroker; + import org.exist.util.LockException; import org.xmldb.api.base.Collection; import org.xmldb.api.base.ErrorCodes; *************** *** 51,55 **** protected LocalCollection parent; protected String docId; - protected BinaryDocument blob = null; protected byte[] rawData = null; --- 52,55 ---- *************** *** 66,74 **** this.docId = docId; } - - public LocalBinaryResource(User user, BrokerPool pool, LocalCollection collection, BinaryDocument blob) { - this(user, pool, collection, blob.getFileName()); - this.blob = blob; - } /* (non-Javadoc) --- 66,69 ---- *************** *** 78,85 **** return parent; } - - public BinaryDocument getBlob() { - return blob; - } /* (non-Javadoc) --- 73,76 ---- *************** *** 101,108 **** */ public Object getContent() throws XMLDBException { ! if(rawData == null && blob != null) { DBBroker broker = null; try { broker = pool.get(user); rawData = broker.getBinaryResourceData(blob); } catch(EXistException e) { --- 92,104 ---- */ public Object getContent() throws XMLDBException { ! if(rawData == null) { DBBroker broker = null; + BinaryDocument blob = null; try { broker = pool.get(user); + blob = getDocument(broker, true); + if(!blob.getPermissions().validate(user, Permission.READ)) + throw new XMLDBException(ErrorCodes.PERMISSION_DENIED, + "Permission denied to read resource"); rawData = broker.getBinaryResourceData(blob); } catch(EXistException e) { *************** *** 110,113 **** --- 106,110 ---- "error while loading binary resource " + getId(), e); } finally { + parent.getCollection().releaseDocument(blob); pool.release(broker); } *************** *** 157,162 **** try { broker = pool.get(user); ! if (blob == null) ! getDocument(broker); if (!blob.getPermissions().validate(user, Permission.READ)) throw new XMLDBException( --- 154,158 ---- try { broker = pool.get(user); ! BinaryDocument blob = getDocument(broker, false); if (!blob.getPermissions().validate(user, Permission.READ)) throw new XMLDBException( *************** *** 178,183 **** try { broker = pool.get(user); ! if (blob == null) ! getDocument(broker); if (!blob.getPermissions().validate(user, Permission.READ)) throw new XMLDBException( --- 174,178 ---- try { broker = pool.get(user); ! BinaryDocument blob = getDocument(broker, false); if (!blob.getPermissions().validate(user, Permission.READ)) throw new XMLDBException( *************** *** 195,214 **** * @see org.exist.xmldb.EXistResource#getPermissions() */ ! public Permission getPermissions() { ! return blob != null ? blob.getPermissions() : null; } ! protected void getDocument(DBBroker broker) throws XMLDBException { ! if (blob != null) ! return; ! try { ! String path = ! (parent.getPath().equals("/") ? '/' + docId : parent.getPath() + '/' + docId); ! blob = (BinaryDocument) broker.getDocument(path); ! if (blob == null) ! throw new XMLDBException(ErrorCodes.INVALID_RESOURCE); ! } catch (PermissionDeniedException e) { ! throw new XMLDBException(ErrorCodes.PERMISSION_DENIED, e); ! } } } --- 190,223 ---- * @see org.exist.xmldb.EXistResource#getPermissions() */ ! public Permission getPermissions() throws XMLDBException { ! DBBroker broker = null; ! try { ! broker = pool.get(user); ! DocumentImpl document = getDocument(broker, false); ! return document != null ? document.getPermissions() : null; ! } catch (EXistException e) { ! throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, e.getMessage(), e); ! } finally { ! pool.release(broker); ! } } ! protected BinaryDocument getDocument(DBBroker broker, boolean lock) throws XMLDBException { ! DocumentImpl document = null; ! if(lock) ! try { ! document = parent.getCollection().getDocumentWithLock(broker, docId); ! } catch (LockException e) { ! throw new XMLDBException(ErrorCodes.PERMISSION_DENIED, ! "Failed to acquire lock on document " + docId); ! } ! else ! document = parent.getCollection().getDocument(broker, docId); ! if (document == null) ! throw new XMLDBException(ErrorCodes.INVALID_RESOURCE); ! if (document.getResourceType() != DocumentImpl.BINARY_FILE) ! throw new XMLDBException(ErrorCodes.WRONG_CONTENT_TYPE, "Document " + docId + ! " is not a binary resource"); ! return (BinaryDocument)document; } } Index: DatabaseImpl.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xmldb/DatabaseImpl.java,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** DatabaseImpl.java 21 May 2004 08:32:14 -0000 1.16 --- DatabaseImpl.java 2 Jul 2004 16:53:53 -0000 1.17 *************** *** 182,185 **** --- 182,186 ---- ? current : null; } catch ( XMLDBException e ) { + e.printStackTrace(); switch ( e.errorCode ) { case ErrorCodes.NO_SUCH_RESOURCE: Index: LocalXUpdateQueryService.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xmldb/LocalXUpdateQueryService.java,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** LocalXUpdateQueryService.java 27 Jun 2004 21:10:09 -0000 1.15 --- LocalXUpdateQueryService.java 2 Jul 2004 16:53:53 -0000 1.16 *************** *** 61,65 **** broker = pool.get(user); if (resource == null) { ! docs = c.allDocs(broker, docs, true); } else { DocumentImpl doc = c.getDocument(broker, resource); --- 61,65 ---- broker = pool.get(user); if (resource == null) { ! docs = c.allDocs(broker, docs, true, true); } else { DocumentImpl doc = c.getDocument(broker, resource); Index: LocalUserManagementService.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xmldb/LocalUserManagementService.java,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** LocalUserManagementService.java 8 Jun 2004 08:16:08 -0000 1.16 --- LocalUserManagementService.java 2 Jul 2004 16:53:53 -0000 1.17 *************** *** 56,60 **** document = ((LocalXMLResource) resource).getDocument(broker, true); else ! document = ((LocalBinaryResource) resource).getBlob(); if (!(document.getPermissions().getOwner().equals(user.getName()) || manager.hasAdminPrivileges(user))) --- 56,60 ---- document = ((LocalXMLResource) resource).getDocument(broker, true); else ! document = ((LocalBinaryResource) resource).getDocument(broker, true); if (!(document.getPermissions().getOwner().equals(user.getName()) || manager.hasAdminPrivileges(user))) *************** *** 164,168 **** document = ((LocalXMLResource) resource).getDocument(broker, true); else ! document = ((LocalBinaryResource) resource).getBlob(); if (!document.getPermissions().getOwner().equals(user.getName()) && !manager.hasAdminPrivileges(user)) --- 164,168 ---- document = ((LocalXMLResource) resource).getDocument(broker, true); else ! document = ((LocalBinaryResource) resource).getDocument(broker, true); if (!document.getPermissions().getOwner().equals(user.getName()) && !manager.hasAdminPrivileges(user)) *************** *** 229,233 **** document = ((LocalXMLResource) resource).getDocument(broker, true); else ! document = ((LocalBinaryResource) resource).getBlob(); if (!document.getPermissions().getOwner().equals(user.getName()) && !manager.hasAdminPrivileges(user)) --- 229,233 ---- document = ((LocalXMLResource) resource).getDocument(broker, true); else ! document = ((LocalBinaryResource) resource).getDocument(broker, true); if (!document.getPermissions().getOwner().equals(user.getName()) && !manager.hasAdminPrivileges(user)) *************** *** 302,307 **** document = ((LocalXMLResource) res).getDocument(broker, true); perm = document.getPermissions(); ! } else ! perm = ((LocalBinaryResource) res).getBlob().getPermissions(); perm.setOwner(u); perm.setGroup(group); --- 302,309 ---- document = ((LocalXMLResource) res).getDocument(broker, true); perm = document.getPermissions(); ! } else { ! document = ((LocalBinaryResource) res).getDocument(broker, true); ! perm = ((LocalBinaryResource) res).getPermissions(); ! } perm.setOwner(u); perm.setGroup(group); *************** *** 335,339 **** doc = ((LocalXMLResource) res).getDocument(broker, true); else ! doc = ((LocalBinaryResource) res).getBlob(); User lockOwner = doc.getUserLock(); return lockOwner == null ? null : lockOwner.getName(); --- 337,341 ---- doc = ((LocalXMLResource) res).getDocument(broker, true); else ! doc = ((LocalBinaryResource) res).getDocument(broker, true); User lockOwner = doc.getUserLock(); return lockOwner == null ? null : lockOwner.getName(); *************** *** 357,361 **** doc = ((LocalXMLResource) res).getDocument(broker, true); else ! doc = ((LocalBinaryResource) res).getBlob(); if (!doc.getPermissions().validate(user, Permission.UPDATE)) throw new XMLDBException(ErrorCodes.PERMISSION_DENIED, --- 359,363 ---- doc = ((LocalXMLResource) res).getDocument(broker, true); else ! doc = ((LocalBinaryResource) res).getDocument(broker, true); if (!doc.getPermissions().validate(user, Permission.UPDATE)) throw new XMLDBException(ErrorCodes.PERMISSION_DENIED, *************** *** 397,401 **** doc = ((LocalXMLResource) res).getDocument(broker, true); else ! doc = ((LocalBinaryResource) res).getBlob(); if (!doc.getPermissions().validate(user, Permission.UPDATE)) throw new XMLDBException(ErrorCodes.PERMISSION_DENIED, --- 399,403 ---- doc = ((LocalXMLResource) res).getDocument(broker, true); else ! doc = ((LocalBinaryResource) res).getDocument(broker, true); if (!doc.getPermissions().validate(user, Permission.UPDATE)) throw new XMLDBException(ErrorCodes.PERMISSION_DENIED, *************** *** 438,442 **** return ((LocalXMLResource) resource).getDocument(broker, false).getPermissions(); else ! return ((LocalBinaryResource) resource).getBlob().getPermissions(); } catch (EXistException e) { throw new XMLDBException( --- 440,444 ---- return ((LocalXMLResource) resource).getDocument(broker, false).getPermissions(); else ! return ((LocalBinaryResource) resource).getDocument(broker, false).getPermissions(); } catch (EXistException e) { throw new XMLDBException( Index: LocalXPathQueryService.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xmldb/LocalXPathQueryService.java,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** LocalXPathQueryService.java 27 Jun 2004 21:10:09 -0000 1.42 --- LocalXPathQueryService.java 2 Jul 2004 16:53:53 -0000 1.43 *************** *** 108,112 **** try { broker = brokerPool.get(user); ! docs = collection.getCollection().allDocs(broker, new DocumentSet(), true); } catch (EXistException e) { throw new XMLDBException( --- 108,112 ---- try { broker = brokerPool.get(user); ! docs = collection.getCollection().allDocs(broker, new DocumentSet(), true, true); } catch (EXistException e) { throw new XMLDBException( *************** *** 151,155 **** broker = brokerPool.get(user); if(docs == null) { ! docs = collection.getCollection().allDocs(broker, new DocumentSet(), true); } --- 151,155 ---- broker = brokerPool.get(user); if(docs == null) { ! docs = collection.getCollection().allDocs(broker, new DocumentSet(), true, true); } *************** *** 181,185 **** try { broker = brokerPool.get(user); ! DocumentSet docs = collection.getCollection().allDocs(broker, new DocumentSet(), true); XQuery xquery = broker.getXQueryService(); --- 181,185 ---- try { broker = brokerPool.get(user); ! DocumentSet docs = collection.getCollection().allDocs(broker, new DocumentSet(), true, true); XQuery xquery = broker.getXQueryService(); Index: LocalCollection.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xmldb/LocalCollection.java,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** LocalCollection.java 8 Jun 2004 08:16:08 -0000 1.33 --- LocalCollection.java 2 Jul 2004 16:53:53 -0000 1.34 *************** *** 277,281 **** r = new LocalXMLResource(user, brokerPool, this, id, -1); else if (document.getResourceType() == DocumentImpl.BINARY_FILE) ! r = new LocalBinaryResource(user, brokerPool, this, (BinaryDocument) document); else throw new XMLDBException( --- 277,281 ---- r = new LocalXMLResource(user, brokerPool, this, id, -1); else if (document.getResourceType() == DocumentImpl.BINARY_FILE) ! r = new LocalBinaryResource(user, brokerPool, this, id); else throw new XMLDBException( *************** *** 453,457 **** res.getId(), (byte[]) res.getContent()); - res.blob = blob; } catch (Exception e) { throw new XMLDBException( --- 453,456 ---- Index: LocalXMLResource.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xmldb/LocalXMLResource.java,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** LocalXMLResource.java 8 Jun 2004 08:16:08 -0000 1.35 --- LocalXMLResource.java 2 Jul 2004 16:53:53 -0000 1.36 *************** *** 137,141 **** throw new XMLDBException(ErrorCodes.PERMISSION_DENIED, "permission denied to read resource"); - if (id < 0) content = serializer.serialize(document); --- 137,140 ---- |