From: Jim Jagielski Date: Fri, 18 Oct 2013 13:36:21 +0000 (+0000) Subject: Merge r1528718 from trunk: X-Git-Tag: 2.4.7~101 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d34ff2fed80fffe7ad359a3744ee1a9d52dd7624;p=apache Merge r1528718 from trunk: mod_dav: Fix PR 55306. Makes mod_dav no longer require that the lock token be provided when the source of a COPY is locked. The prior behavior was in violating of RFC 4918 which says that the lock token is only required on resources that may be modified by the method. * modules/dav/main/mod_dav.h (DAV_VALIDATE_NO_MODIFY): New flag to be passed to dav_validate_* functions. * modules/dav/main/mod_dav.c (dav_method_copymove): Use the new flag when calling dav_validate_request() on the COPY source. * modules/dav/main/util.c (dav_validate_resource_state): Use the flag to decide to ignore if the lock token is not provided. Submitted by: breser Reviewed/backported by: jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1533447 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 6747a8ff63..485dedd8e8 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,8 @@ Changes with Apache 2.4.7 + *) mod_dav: Don't require lock tokens for COPY source. PR 55306. + *) core: Don't truncate output when sending is interrupted by a signal, such as from an exiting CGI process. PR 55643. [Jeff Trawick] diff --git a/STATUS b/STATUS index 737a9d1a05..b1b670d617 100644 --- a/STATUS +++ b/STATUS @@ -97,10 +97,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_dav: Fix 55306. Don't require lock tokens for COPY source. - trunk patches: https://svn.apache.org/r1528718 - 2.4.x: trunk works, CHANGES needs to be written when merging - +1: breser, minfrin, jim * mod_dav: Fix 55397. dav_resource->uri treated as unencoded. This was an unnecessary ABI changed introduced in 2.4.6. diff --git a/modules/dav/main/mod_dav.c b/modules/dav/main/mod_dav.c index 1c2cbb17ce..c1187af1ec 100644 --- a/modules/dav/main/mod_dav.c +++ b/modules/dav/main/mod_dav.c @@ -2766,7 +2766,8 @@ static int dav_method_copymove(request_rec *r, int is_move) if ((err = dav_validate_request(r, resource, depth, NULL, &multi_response, (is_move ? DAV_VALIDATE_PARENT - : DAV_VALIDATE_RESOURCE) + : DAV_VALIDATE_RESOURCE + | DAV_VALIDATE_NO_MODIFY) | DAV_VALIDATE_USE_424, NULL)) != NULL) { err = dav_push_error(r->pool, err->status, 0, diff --git a/modules/dav/main/mod_dav.h b/modules/dav/main/mod_dav.h index 7b91b63cf2..74b421b534 100644 --- a/modules/dav/main/mod_dav.h +++ b/modules/dav/main/mod_dav.h @@ -1297,6 +1297,9 @@ DAV_DECLARE(dav_error *) dav_validate_request(request_rec *r, the 424 DAV:response */ #define DAV_VALIDATE_USE_424 0x0080 /* return 424 status, not 207 */ #define DAV_VALIDATE_IS_PARENT 0x0100 /* for internal use */ +#define DAV_VALIDATE_NO_MODIFY 0x0200 /* resource is not being modified + so allow even if lock token + is not provided */ /* Lock-null related public lock functions */ DAV_DECLARE(int) dav_get_resource_state(request_rec *r, diff --git a/modules/dav/main/util.c b/modules/dav/main/util.c index ab42af0229..1f393401b2 100644 --- a/modules/dav/main/util.c +++ b/modules/dav/main/util.c @@ -954,13 +954,16 @@ static dav_error * dav_validate_resource_state(apr_pool_t *p, /* ** For methods other than LOCK: ** - ** If we have no locks, then can be set to true -- + ** If we have no locks or if the resource is not being modified + ** (per RFC 4918 the lock token is not required on resources + ** we are not changing), then can be set to true -- ** pretending that we've already met the requirement of seeing one ** of the resource's locks in the If: header. ** ** Otherwise, it must be cleared and we'll look for one. */ - seen_locktoken = (lock_list == NULL); + seen_locktoken = (lock_list == NULL + || flags & DAV_VALIDATE_NO_MODIFY); } /*