Follow-up to r1936010: close the remaining issue #3445 residual in the write-through proxy.
The body-rewrite filters still did a blind substitution of the location root,
so a dead-property value containing the master location, or a mid-path directory
named like the slave location, was rewritten along with the genuine hrefs.
Anchor the match on the href tag (<D:href>): serf and mod_dav(_svn) both emit
that prefix with the path immediately after the tag, so only href-initial roots
are translated. A raw <D:href> inside a property value would still be
rewritten;, that cannot currently happen because the emitters escape or
base64-encode values. Although that is not a structural guarantee.
* subversion/mod_dav_svn/mirror.c
(PROXY_HREF_ANCHOR): New. Document the href-tag anchor.
(locate_ctx_t): Store search/replace strings instead of named local/remote paths.
(locate_ctx_init): New. Build the anchored pattern and replacement from a
from-root and a to-root.
(dav_svn__location_in_filter, dav_svn__location_body_filter): Use locate_ctx_init.
(dav_svn__location_header_filter): Concatenate the slave root and the
remainder without a separator, avoiding a doubled slash.
* subversion/tests/cmdline/dav-mirror-autocheck.sh
(curl_auth, create_master_txn, delete_master_txn, propfind_slave_txr): New
helpers for the in-txn curl probes.
Add full coverage of all routes through the proxy: move and v1 MKACTIVITY/CHECKOUT
including a clean Location rewrite. A proxied revprop change whose value contains
the slave URL, dead-property values surviving a proxied PROPFIND (the former XFAIL),
and a location-name collision in multistatus hrefs. Tests now all include <D:href>
with the slave URL in the user data to ensure they are escaped properly or
protected by the filter whitelist.
git-svn-id: https://svn.apache.org/repos/asf/subversion/branches/proxy-move-copy-fix@1937142 13f79535-47bb-0310-9956-ffa450edef68
2 files changed