Hi,
I now have a reproducible test setup for this bug in the latest trunk.
1. Load trigger.xql and query.xql into /db
2. Load collection.xconf to /db/system/config/db
3. Make a new user called mytest, password mytest, group mytest, home
directory /home/mytest
4. from the REST interface, run
http://localhost:8080/exist/rest/db/query.xql
The expected result is that a new resource "/home/mytest/test.xml" will
be created, with an attribute on the root element.
The actual result is that the resource is created, but an exception like
the one reproduced below occurs.
Any subsequent run of query.xql will result in an exception saying that
the resource does not have update enabled, which is true. The
xmldb:set-resource-permissions() call is never made because of the error
in xmldb:store()
Thank you,
-Efraim
On 07/29/2011 04:17 PM, Efraim Feinstein wrote:
> Hi,
>
> In recent trunk (1.5 r14968), I'm seeing a new error during an
> xmldb:store operation with a trigger, with the exception trace
> reproduced below.
>
> A trigger activates after document creation in order to add an
> attribute to the root element using XQuery update. The trigger worked
> before the new permissions system was introduced. It does not attempt
> to delete the resource, which is what the exception looks like it's
> trying to prevent.
>
> The resource was created by a query running as user "new1", has
> owner/group = new1/new1 with 644 permissions. As far as I can tell,
> the permissions can't be changed until xmldb:store() completes
> successfully. The trigger -- as far as I can tell from a debugging
> output of xmldb:get-current-user() -- is running as user new1.
>
>
> Thanks,
> Efraim
>
> 2011-07-29 16:03:14,577 [eXistThread-33] ERROR (XMLDBStore.java
> [evalWithCollection]:212) - Error during trigger prepare
> org.xmldb.api.base.XMLDBException: Error during trigger prepare
> at
> org.exist.xmldb.LocalCollection.storeXMLResource(LocalCollection.java:764)
> at
> org.exist.xmldb.LocalCollection.storeResource(LocalCollection.java:650)
> at
> org.exist.xmldb.LocalCollection.storeResource(LocalCollection.java:641)
> at
> org.exist.xquery.functions.xmldb.XMLDBStore.evalWithCollection(XMLDBStore.java:208)
> at
> org.exist.xquery.functions.xmldb.XMLDBAbstractCollectionManipulator.eval(XMLDBAbstractCollectionManipulator.java:173)
> at org.exist.xquery.BasicFunction.eval(BasicFunction.java:68)
> at
> org.exist.xquery.InternalFunctionCall.eval(InternalFunctionCall.java:55)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:155)
> at
> org.exist.xquery.BindingExpression.eval(BindingExpression.java:156)
> at
> org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:70)
> at org.exist.xquery.PathExpr.eval(PathExpr.java:243)
> at
> org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:83)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:56)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:63)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:210)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at
> org.exist.xquery.BindingExpression.eval(BindingExpression.java:156)
> at
> org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:135)
> at
> org.exist.xquery.DynamicCardinalityCheck.eval(DynamicCardinalityCheck.java:72)
> at org.exist.xquery.Atomize.eval(Atomize.java:66)
> at
> org.exist.xquery.DynamicTypeCheck.eval(DynamicTypeCheck.java:61)
> at
> org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:279)
> at org.exist.xquery.FunctionCall.eval(FunctionCall.java:205)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:155)
> at
> org.exist.xquery.BindingExpression.eval(BindingExpression.java:156)
> at
> org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:56)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:63)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:210)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at
> org.exist.xquery.BindingExpression.eval(BindingExpression.java:156)
> at
> org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
> at
> org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:135)
> at
> org.exist.xquery.DynamicCardinalityCheck.eval(DynamicCardinalityCheck.java:72)
> at
> org.exist.xquery.DynamicTypeCheck.eval(DynamicTypeCheck.java:61)
> at
> org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:279)
> at org.exist.xquery.FunctionCall.eval(FunctionCall.java:205)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:56)
> at
> org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:102)
> at
> org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
> at
> org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:56)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:63)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:210)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at
> org.exist.xquery.BindingExpression.eval(BindingExpression.java:156)
> at
> org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
> at
> org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:70)
> at org.exist.xquery.PathExpr.eval(PathExpr.java:243)
> at
> org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:83)
> at
> org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:70)
> at org.exist.xquery.PathExpr.eval(PathExpr.java:243)
> at
> org.exist.xquery.FilteredExpression.eval(FilteredExpression.java:103)
> at
> org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:70)
> at org.exist.xquery.PathExpr.eval(PathExpr.java:243)
> at
> org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:70)
> at org.exist.xquery.XQuery.execute(XQuery.java:246)
> at org.exist.xquery.XQuery.execute(XQuery.java:201)
> at org.exist.http.RESTServer.executeXQuery(RESTServer.java:1392)
> at org.exist.http.RESTServer.doPost(RESTServer.java:630)
> at
> org.exist.http.servlets.EXistServlet.doPost(EXistServlet.java:559)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> at
> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:538)
> at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
> at
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:517)
> at
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:937)
> at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
> at
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:871)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
> at
> org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:239)
> at
> org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:115)
> at org.exist.http.urlrewrite.Forward.doRewrite(Forward.java:47)
> at
> org.exist.http.urlrewrite.XQueryURLRewrite.doRewrite(XQueryURLRewrite.java:551)
> at
> org.exist.http.urlrewrite.XQueryURLRewrite.doFilter(XQueryURLRewrite.java:341)
> at
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1323)
> at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:476)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
> at
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:480)
> at
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:937)
> at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
> at
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:871)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
> at
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
> at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
> at org.eclipse.jetty.server.Server.handle(Server.java:346)
> at
> org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:589)
> at
> org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1065)
> at
> org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:823)
> at
> org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:220)
> at
> org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:411)
> at
> org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:531)
> at
> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40)
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529)
> at java.lang.Thread.run(Thread.java:636)
> Caused by: org.exist.xquery.XPathException: permission to remove
> document denied [at line 71, column 9, source:
> /db/code/triggers/document-uri.xql]
> In function:
> trigger:write-document-uri(xs:anyURI*)
> [84:3:/db/code/triggers/document-uri.xql]
> trigger:after-create-document(xs:anyURI*)
> [-1:-1:/db/code/triggers/document-uri.xql]
> at
> org.exist.collections.triggers.XQueryTrigger.execute(XQueryTrigger.java:531)
> at
> org.exist.collections.triggers.XQueryTrigger.afterCreateDocument(XQueryTrigger.java:842)
> at
> org.exist.collections.IndexInfo.finishTrigger(IndexInfo.java:128)
> at
> org.exist.collections.Collection.storeXMLInternal(Collection.java:1032)
> at org.exist.collections.Collection.store(Collection.java:935)
> at
> org.exist.xmldb.LocalCollection.storeXMLResource(LocalCollection.java:755)
> ... 107 more
> Caused by: org.exist.xquery.XPathException: permission to remove
> document denied [at line 71, column 9, source:
> /db/code/triggers/document-uri.xql]
> In function:
> trigger:write-document-uri(xs:anyURI*)
> [84:3:/db/code/triggers/document-uri.xql]
> trigger:after-create-document(xs:anyURI*)
> [-1:-1:/db/code/triggers/document-uri.xql]
> at
> org.exist.collections.triggers.XQueryTrigger.execute(XQueryTrigger.java:531)
> at
> org.exist.collections.triggers.XQueryTrigger.afterCreateDocument(XQueryTrigger.java:842)
> at
> org.exist.collections.IndexInfo.finishTrigger(IndexInfo.java:128)
> at
> org.exist.collections.Collection.storeXMLInternal(Collection.java:1032)
> at org.exist.collections.Collection.store(Collection.java:935)
> at
> org.exist.xmldb.LocalCollection.storeXMLResource(LocalCollection.java:755)
> at
> org.exist.xmldb.LocalCollection.storeResource(LocalCollection.java:650)
> at
> org.exist.xmldb.LocalCollection.storeResource(LocalCollection.java:641)
> at
> org.exist.xquery.functions.xmldb.XMLDBStore.evalWithCollection(XMLDBStore.java:208)
> at
> org.exist.xquery.functions.xmldb.XMLDBAbstractCollectionManipulator.eval(XMLDBAbstractCollectionManipulator.java:173)
> at org.exist.xquery.BasicFunction.eval(BasicFunction.java:68)
> at
> org.exist.xquery.InternalFunctionCall.eval(InternalFunctionCall.java:55)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:155)
> at
> org.exist.xquery.BindingExpression.eval(BindingExpression.java:156)
> at
> org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:70)
> at org.exist.xquery.PathExpr.eval(PathExpr.java:243)
> at
> org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:83)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:56)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:63)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:210)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at
> org.exist.xquery.BindingExpression.eval(BindingExpression.java:156)
> at
> org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:135)
> at
> org.exist.xquery.DynamicCardinalityCheck.eval(DynamicCardinalityCheck.java:72)
> at org.exist.xquery.Atomize.eval(Atomize.java:66)
> at
> org.exist.xquery.DynamicTypeCheck.eval(DynamicTypeCheck.java:61)
> at
> org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:279)
> at org.exist.xquery.FunctionCall.eval(FunctionCall.java:205)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:155)
> at
> org.exist.xquery.BindingExpression.eval(BindingExpression.java:156)
> at
> org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:56)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:63)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:210)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at
> org.exist.xquery.BindingExpression.eval(BindingExpression.java:156)
> at
> org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
> at
> org.exist.xquery.UserDefinedFunction.eval(UserDefinedFunction.java:135)
> at
> org.exist.xquery.DynamicCardinalityCheck.eval(DynamicCardinalityCheck.java:72)
> at
> org.exist.xquery.DynamicTypeCheck.eval(DynamicTypeCheck.java:61)
> at
> org.exist.xquery.FunctionCall.evalFunction(FunctionCall.java:279)
> at org.exist.xquery.FunctionCall.eval(FunctionCall.java:205)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:56)
> at
> org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:102)
> at
> org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
> at
> org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:56)
> at
> org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:63)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:210)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at org.exist.xquery.LetExpr.eval(LetExpr.java:208)
> at
> org.exist.xquery.BindingExpression.eval(BindingExpression.java:156)
> at
> org.exist.xquery.ConditionalExpression.eval(ConditionalExpression.java:100)
> at
> org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:70)
> at org.exist.xquery.PathExpr.eval(PathExpr.java:243)
> at
> org.exist.xquery.SequenceConstructor.eval(SequenceConstructor.java:83)
> at
> org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:70)
> at org.exist.xquery.PathExpr.eval(PathExpr.java:243)
> at
> org.exist.xquery.FilteredExpression.eval(FilteredExpression.java:103)
> at
> org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:70)
> at org.exist.xquery.PathExpr.eval(PathExpr.java:243)
> at
> org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:70)
> at org.exist.xquery.XQuery.execute(XQuery.java:246)
> at org.exist.xquery.XQuery.execute(XQuery.java:201)
> at org.exist.http.RESTServer.executeXQuery(RESTServer.java:1392)
> at org.exist.http.RESTServer.doPost(RESTServer.java:630)
> at
> org.exist.http.servlets.EXistServlet.doPost(EXistServlet.java:559)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> at
> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:538)
> at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
> at
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:517)
> at
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:937)
> at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
> at
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:871)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
> at
> org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:239)
> at
> org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:115)
> at org.exist.http.urlrewrite.Forward.doRewrite(Forward.java:47)
> at
> org.exist.http.urlrewrite.XQueryURLRewrite.doRewrite(XQueryURLRewrite.java:551)
> at
> org.exist.http.urlrewrite.XQueryURLRewrite.doFilter(XQueryURLRewrite.java:341)
> at
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1323)
> at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:476)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
> at
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:480)
> at
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:937)
> at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
> at
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:871)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
> at
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
> at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
> at org.eclipse.jetty.server.Server.handle(Server.java:346)
> at
> org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:589)
> at
> org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1065)
> at
> org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:823)
> at
> org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:220)
> at
> org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:411)
> at
> org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:531)
> at
> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40)
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529)
> at java.lang.Thread.run(Thread.java:636)
>
--
---
Efraim Feinstein
Lead Developer
Open Siddur Project
http://opensiddur.net
http://wiki.jewishliturgy.org
|