]> granicus.if.org Git - apache/commitdiff
* Fix If-Match handling:
authorRuediger Pluem <rpluem@apache.org>
Wed, 17 Dec 2014 15:39:15 +0000 (15:39 +0000)
committerRuediger Pluem <rpluem@apache.org>
Wed, 17 Dec 2014 15:39:15 +0000 (15:39 +0000)
  - We need to fail if we do NOT match.
  - ETag comparison only makes sense if we have an ETag

PR: 57358
Submitted by: Kunihiko Sakamoto <ksakamoto google.com>
Reviewed by: rpluem

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1646282 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/http/http_protocol.c

diff --git a/CHANGES b/CHANGES
index 595193a2a272556a1eeb9ce453a357b8fde1da24..05541f82a6dd92e1e8fb46fb476e5dabf9ae36d7 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
-  
+
+  *) mod_http: Fix incorrect If-Match handling. PR 57358
+     [Kunihiko Sakamoto <ksakamoto google.com>]
+
   *) mod_proxy_ajp: Fix handling of the default port (8009) in the
      ProxyPass and <Proxy> configurations.  PR 57259.  [Yann Ylavic].
 
index a7f30fcf98c4907ad71886a890a18d2ab6393dff..fc7ec6ccbe7ff79e9374b3f6c70c0de89b73d4e2 100644 (file)
@@ -316,8 +316,8 @@ AP_DECLARE(ap_condition_e) ap_condition_if_match(request_rec *r,
      */
     if ((if_match = apr_table_get(r->headers_in, "If-Match")) != NULL) {
         if (if_match[0] == '*'
-                || ((etag = apr_table_get(headers, "ETag")) == NULL
-                        && !ap_find_etag_strong(r->pool, if_match, etag))) {
+                || ((etag = apr_table_get(headers, "ETag")) != NULL
+                        && ap_find_etag_strong(r->pool, if_match, etag))) {
             return AP_CONDITION_STRONG;
         }
         else {
@@ -552,9 +552,6 @@ AP_DECLARE(int) ap_meets_conditions(request_rec *r)
      */
     cond = ap_condition_if_match(r, r->headers_out);
     if (AP_CONDITION_NOMATCH == cond) {
-        not_modified = 0;
-    }
-    else if (cond >= AP_CONDITION_WEAK) {
         return HTTP_PRECONDITION_FAILED;
     }