From 4ba1c75678f9dd5fbfdda68961163887fd7ea92e Mon Sep 17 00:00:00 2001 From: Graham Leggett Date: Sun, 26 May 2013 19:48:45 +0000 Subject: [PATCH] mod_dav: Sending an If or If-Match header with an invalid ETag doesn't result in a 412 Precondition Failed for a COPY operation. PR54610 trunk patch: http://svn.apache.org/r1476604 Submitted by: Timothy Wood Reviewed by: minfrin, jim, jorton git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1486456 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 4 ++++ STATUS | 6 ------ modules/dav/main/mod_dav.c | 22 +++++++++++----------- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/CHANGES b/CHANGES index bda41f308e..d24a171a02 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,10 @@ Changes with Apache 2.4.5 + *) mod_dav: Sending a If or If-Match header with an invalid ETag doesn't + result in a 412 Precondition Failed. PR54610 [Timothy Wood + ] + *) mod_dav: Make sure that when we prepare an If URL for Etag comparison, we compare unencoded paths. PR 53910 [Timothy Wood ] diff --git a/STATUS b/STATUS index 8a434bd08f..07dfcd2022 100644 --- a/STATUS +++ b/STATUS @@ -90,12 +90,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_dav: Sending a If or If-Match header with an invalid ETag doesn't - result in a 412 Precondition Failed. PR54610 - trunk patch: http://svn.apache.org/r1476604 - 2.4.x patch: trunk patch works (minus CHANGES) - +1: minfrin, jim, jorton - * mod_dav: When a PROPPATCH attempts to remove a non-existent dead property on a resource for which there is no dead property in the same namespace httpd segfaults. PR 52559 diff --git a/modules/dav/main/mod_dav.c b/modules/dav/main/mod_dav.c index 2c323f48f8..05b4669eab 100644 --- a/modules/dav/main/mod_dav.c +++ b/modules/dav/main/mod_dav.c @@ -2751,10 +2751,10 @@ static int dav_method_copymove(request_rec *r, int is_move) } /* - * Check If-Headers and existing locks for each resource in the source - * if we are performing a MOVE. We will return a 424 response with a - * DAV:multistatus body. The multistatus responses will contain the - * information about any resource that fails the validation. + * Check If-Headers and existing locks for each resource in the source. + * We will return a 424 response with a DAV:multistatus body. + * The multistatus responses will contain the information about any + * resource that fails the validation. * * We check the parent resource, too, since this is a MOVE. Moving the * resource effectively removes it from the parent collection, so we @@ -2763,17 +2763,17 @@ static int dav_method_copymove(request_rec *r, int is_move) * If a problem occurs with the Request-URI itself, then a plain error * (rather than a multistatus) will be returned. */ - if (is_move - && (err = dav_validate_request(r, resource, depth, NULL, - &multi_response, - DAV_VALIDATE_PARENT - | DAV_VALIDATE_USE_424, - NULL)) != NULL) { + if ((err = dav_validate_request(r, resource, depth, NULL, + &multi_response, + DAV_VALIDATE_PARENT + | DAV_VALIDATE_USE_424, + NULL)) != NULL) { err = dav_push_error(r->pool, err->status, 0, apr_psprintf(r->pool, - "Could not MOVE %s due to a failed " + "Could not %s %s due to a failed " "precondition on the source " "(e.g. locks).", + is_move ? "MOVE" : "COPY", ap_escape_html(r->pool, r->uri)), err); return dav_handle_err(r, err, multi_response); -- 2.40.0