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/06/16 14:45:53 UTC

svn commit: r1878891 - in /jackrabbit/trunk/jackrabbit-jcr-server/src: main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java test/java/org/apache/jackrabbit/webdav/server/ConditionalsTest.java

Author: reschke
Date: Tue Jun 16 14:45:53 2020
New Revision: 1878891

URL: http://svn.apache.org/viewvc?rev=1878891&view=rev
Log:
JCR-4587: jackrabbit-webdav: include if-unmodified-since in precondition check

Modified:
    jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java
    jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/ConditionalsTest.java

Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java?rev=1878891&r1=1878890&r2=1878891&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java Tue Jun 16 14:45:53 2020
@@ -194,6 +194,21 @@ public abstract class SimpleWebdavServle
     @Override
     protected boolean isPreconditionValid(WebdavRequest request,
                                           DavResource resource) {
+
+
+        long ifUnmodifiedSince = UNDEFINED_TIME;
+        try {
+            ifUnmodifiedSince = request.getDateHeader("if-unmodified-since");
+        } catch (IllegalArgumentException ex) {
+            log.trace("illegal value for if-unmodified-since ignored: " + request.getHeader("if-unmodified-since"));
+        }
+
+        if (ifUnmodifiedSince > UNDEFINED_TIME && resource.exists()) {
+            if (resource.getModificationTime() / 1000 > ifUnmodifiedSince / 1000) {
+                return false;
+            }
+        }
+
         return !resource.exists() || request.matchesIfHeader(resource);
     }
 

Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/ConditionalsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/ConditionalsTest.java?rev=1878891&r1=1878890&r2=1878891&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/ConditionalsTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/server/ConditionalsTest.java Tue Jun 16 14:45:53 2020
@@ -126,15 +126,15 @@ 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);
+            }
         } finally {
             delete(testUri);
         }