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); }