diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml
index ab87e6629..ba551a8cc 100644
--- a/jackrabbit-jcr-server/pom.xml
+++ b/jackrabbit-jcr-server/pom.xml
@@ -176,8 +176,6 @@
org.apache.jackrabbit.webdav.server.RFC4918IfHeaderTest#testPutIfEtag
-
- org.apache.jackrabbit.webdav.server.RFC4918IfHeaderTest#testPutIfLockToken
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java
index 63d272865..eca292729 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java
@@ -103,6 +103,8 @@ public class IfHeader implements Header {
*/
private List allNotTokens = new ArrayList();
+ private String uriPrefix;
+
/**
* Create a Untagged IfHeader if the given lock tokens.
*
@@ -127,6 +129,9 @@ public class IfHeader implements Header {
* @param req The request object
*/
public IfHeader(HttpServletRequest req) {
+ String host = req.getHeader("Host");
+ String scheme = req.getScheme();
+ uriPrefix = scheme + "://" + host + req.getContextPath();
headerValue = req.getHeader(DavConstants.HEADER_IF);
ifHeader = parse();
}
@@ -858,7 +863,7 @@ public class IfHeader implements Header {
Tagged = { "<" Word ">" "(" IfList ")" } .
*
*/
- private static class IfHeaderMap extends HashMap implements IfHeaderInterface {
+ private class IfHeaderMap extends HashMap implements IfHeaderInterface {
/**
* Matches the token and etag for the given resource. If the resource is
@@ -876,10 +881,22 @@ public class IfHeader implements Header {
public boolean matches(String resource, String token, String etag) {
log.debug("matches: Trying to match resource="+resource+", token="+token+","+etag);
- IfHeaderList list = get(resource);
+ String uri;
+ String path;
+ if (resource.startsWith("/")) {
+ path = resource;
+ uri = IfHeader.this.uriPrefix + resource;
+ } else {
+ path = resource.substring(IfHeader.this.uriPrefix.length());
+ uri = resource;
+ }
+ IfHeaderList list = get(path);
+ if (list == null) {
+ list = get(uri);
+ }
if (list == null) {
- log.debug("matches: No entry for tag "+resource+", assuming match");
- return true;
+ log.debug("matches: No entry for tag "+resource+", assuming mismatch");
+ return false;
} else {
return list.matches(resource, token, etag);
}