Index: jackrabbit-jcr-server/pom.xml
===================================================================
--- jackrabbit-jcr-server/pom.xml (revision 1913113)
+++ jackrabbit-jcr-server/pom.xml (working copy)
@@ -170,13 +170,6 @@
derby.stream.error.file
target/derby.log
-
- known.issues
-
-
- org.apache.jackrabbit.webdav.server.RFC4918IfHeaderTest#testPutIfEtag
-
-
Index: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java
===================================================================
--- jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java (revision 1913113)
+++ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java (working copy)
@@ -214,7 +214,7 @@
}
}
- return !resource.exists() || request.matchesIfHeader(resource);
+ return request.matchesIfHeader(resource);
}
/**
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java (revision 1913113)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java (working copy)
@@ -61,6 +61,7 @@
import org.apache.jackrabbit.webdav.header.OverwriteHeader;
import org.apache.jackrabbit.webdav.header.PollTimeoutHeader;
import org.apache.jackrabbit.webdav.header.TimeoutHeader;
+import org.apache.jackrabbit.webdav.lock.ActiveLock;
import org.apache.jackrabbit.webdav.lock.LockInfo;
import org.apache.jackrabbit.webdav.lock.Scope;
import org.apache.jackrabbit.webdav.lock.Type;
@@ -619,19 +620,22 @@
* @see org.apache.jackrabbit.webdav.lock.ActiveLock#getToken()
*/
public boolean matchesIfHeader(DavResource resource) {
- // no ifheader, no resource or no write lock on resource
+ // no ifheader
// >> preconditions ok so far
- if (!ifHeader.hasValue() || resource == null || !resource.hasLock(Type.WRITE, Scope.EXCLUSIVE)) {
+ if (!ifHeader.hasValue() || resource == null) {
return true;
}
- boolean isMatching = false;
- String lockToken = resource.getLock(Type.WRITE, Scope.EXCLUSIVE).getToken();
- if (lockToken != null) {
- isMatching = matchesIfHeader(resource.getHref(), lockToken, getStrongETag(resource));
- } // else: lockToken is null >> the if-header will not match.
-
- return isMatching;
+ ActiveLock[] locks = resource.getLocks();
+ if (!resource.exists() || locks.length == 0) {
+ return matchesIfHeader(resource.getHref(), null, getStrongETag(resource));
+ }
+ for (ActiveLock lock : locks) {
+ if (matchesIfHeader(resource.getHref(), lock.getToken(), getStrongETag(resource))) {
+ return true;
+ }
+ }
+ return false;
}
/**
@@ -650,11 +654,13 @@
* @return strong etag or empty string.
*/
private String getStrongETag(DavResource resource) {
- DavProperty> prop = resource.getProperty(DavPropertyName.GETETAG);
- if (prop != null && prop.getValue() != null) {
- String etag = prop.getValue().toString();
- if (isStrongETag(etag)) {
- return etag;
+ if (resource.exists()) {
+ DavProperty> prop = resource.getProperty(DavPropertyName.GETETAG);
+ if (prop != null && prop.getValue() != null) {
+ String etag = prop.getValue().toString();
+ if (isStrongETag(etag)) {
+ return etag;
+ }
}
}
// no strong etag available
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java (revision 1913113)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java (working copy)
@@ -662,7 +662,7 @@
*/
@Override
public boolean match(String token, String etag) {
- return super.match(token);
+ return token == null || super.match(token);
}
/**