You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2020/07/09 17:06:16 UTC
svn commit: r1879720 - in /jackrabbit/branches/2.20: ./
jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/
jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/
jackrabbit-webdav/src/main/java/org/apache/jackrab...
Author: reschke
Date: Thu Jul 9 17:06:16 2020
New Revision: 1879720
URL: http://svn.apache.org/viewvc?rev=1879720&view=rev
Log:
JCR-4587: jackrabbit-webdav: must ignore broken if-unmodified-since in precondition check (merged r1878891 and r1879057 into 2.20)
Modified:
jackrabbit/branches/2.20/ (props changed)
jackrabbit/branches/2.20/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java
jackrabbit/branches/2.20/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/ConditionalsTest.java
jackrabbit/branches/2.20/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java
Propchange: jackrabbit/branches/2.20/
------------------------------------------------------------------------------
Merged /jackrabbit/trunk:r1878891,1879057
Modified: jackrabbit/branches/2.20/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.20/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java?rev=1879720&r1=1879719&r2=1879720&view=diff
==============================================================================
--- jackrabbit/branches/2.20/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java (original)
+++ jackrabbit/branches/2.20/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java Thu Jul 9 17:06:16 2020
@@ -194,6 +194,24 @@ public abstract class SimpleWebdavServle
@Override
protected boolean isPreconditionValid(WebdavRequest request,
DavResource resource) {
+
+ long ifUnmodifiedSince = UNDEFINED_TIME;
+ try {
+ // will throw if multiple field lines present
+ String value = AbstractWebdavServlet.getSingletonField(request, "If-Unmodified-Since");
+ if (value != null) {
+ ifUnmodifiedSince = request.getDateHeader("If-Unmodified-Since");
+ }
+ } catch (IllegalArgumentException ex) {
+ log.debug("illegal value for if-unmodified-since ignored: " + ex.getMessage());
+ }
+
+ if (ifUnmodifiedSince > UNDEFINED_TIME && resource.exists()) {
+ if (resource.getModificationTime() / 1000 > ifUnmodifiedSince / 1000) {
+ return false;
+ }
+ }
+
return !resource.exists() || request.matchesIfHeader(resource);
}
Modified: jackrabbit/branches/2.20/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/ConditionalsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.20/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/ConditionalsTest.java?rev=1879720&r1=1879719&r2=1879720&view=diff
==============================================================================
--- jackrabbit/branches/2.20/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/ConditionalsTest.java (original)
+++ jackrabbit/branches/2.20/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/ConditionalsTest.java Thu Jul 9 17:06:16 2020
@@ -138,15 +138,26 @@ public class ConditionalsTest extends We
assertEquals(204, status);
}
- // // conditional PUT once more should fail
- // {
- // HttpPut put = new HttpPut(testUri);
- // put.setHeader("If-Unmodified-Since", lm.getValue());
- // put.setEntity(new StringEntity("lazydog"));
- // HttpResponse response = this.client.execute(put, this.context);
- // int status = response.getStatusLine().getStatusCode();
- // assertEquals(412, status);
- // }
+ // conditional PUT once more should fail
+ {
+ HttpPut put = new HttpPut(testUri);
+ put.setHeader("If-Unmodified-Since", lm.getValue());
+ put.setEntity(new StringEntity("lazydog"));
+ HttpResponse response = this.client.execute(put, this.context);
+ int status = response.getStatusLine().getStatusCode();
+ assertEquals(412, status);
+ }
+
+ // conditional PUT with broken If-Unmodified-Since should pass
+ {
+ HttpPut put = new HttpPut(testUri);
+ put.addHeader("If-Unmodified-Since", lm.getValue());
+ put.addHeader("If-Unmodified-Since", "foo");
+ put.setEntity(new StringEntity("qux"));
+ HttpResponse response = this.client.execute(put, this.context);
+ int status = response.getStatusLine().getStatusCode();
+ assertEquals(204, status);
+ }
} finally {
delete(testUri);
}
Modified: jackrabbit/branches/2.20/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.20/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java?rev=1879720&r1=1879719&r2=1879720&view=diff
==============================================================================
--- jackrabbit/branches/2.20/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java (original)
+++ jackrabbit/branches/2.20/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java Thu Jul 9 17:06:16 2020
@@ -1529,7 +1529,7 @@ abstract public class AbstractWebdavServ
* @return the field value (when there is indeed a single field line) or {@code null} when field not present
* @throws IllegalArgumentException when multiple field lines present
*/
- private static String getSingletonField(HttpServletRequest request, String fieldName) {
+ protected static String getSingletonField(HttpServletRequest request, String fieldName) {
@SuppressWarnings("unchecked")
Enumeration<String> lines = request.getHeaders(fieldName);
if (!lines.hasMoreElements()) {