summaryrefslogtreecommitdiff
path: root/httpd-2.4.57-r1912081.patch
diff options
context:
space:
mode:
Diffstat (limited to 'httpd-2.4.57-r1912081.patch')
-rw-r--r--httpd-2.4.57-r1912081.patch91
1 files changed, 91 insertions, 0 deletions
diff --git a/httpd-2.4.57-r1912081.patch b/httpd-2.4.57-r1912081.patch
new file mode 100644
index 0000000..111e5ac
--- /dev/null
+++ b/httpd-2.4.57-r1912081.patch
@@ -0,0 +1,91 @@
+# ./pullrev.sh 1912081
+http://svn.apache.org/viewvc?view=revision&revision=1912081
+
+Upstream-Status: merged in 2.4.58
+
+--- httpd-2.4.57/modules/dav/main/mod_dav.c
++++ httpd-2.4.57/modules/dav/main/mod_dav.c
+@@ -81,6 +81,7 @@
+ const char *provider_name;
+ const dav_provider *provider;
+ const char *dir;
++ const char *base;
+ int locktimeout;
+ int allow_depthinfinity;
+ int allow_lockdiscovery;
+@@ -196,6 +197,7 @@
+
+ newconf->locktimeout = DAV_INHERIT_VALUE(parent, child, locktimeout);
+ newconf->dir = DAV_INHERIT_VALUE(parent, child, dir);
++ newconf->base = DAV_INHERIT_VALUE(parent, child, base);
+ newconf->allow_depthinfinity = DAV_INHERIT_VALUE(parent, child,
+ allow_depthinfinity);
+ newconf->allow_lockdiscovery = DAV_INHERIT_VALUE(parent, child,
+@@ -283,6 +285,18 @@
+ }
+
+ /*
++ * Command handler for the DAVBasePath directive, which is TAKE1
++ */
++static const char *dav_cmd_davbasepath(cmd_parms *cmd, void *config, const char *arg1)
++{
++ dav_dir_conf *conf = config;
++
++ conf->base = arg1;
++
++ return NULL;
++}
++
++/*
+ * Command handler for the DAVDepthInfinity directive, which is FLAG.
+ */
+ static const char *dav_cmd_davdepthinfinity(cmd_parms *cmd, void *config,
+@@ -748,7 +762,7 @@
+ int use_checked_in, dav_resource **res_p)
+ {
+ dav_dir_conf *conf;
+- const char *label = NULL;
++ const char *label = NULL, *base;
+ dav_error *err;
+
+ /* if the request target can be overridden, get any target selector */
+@@ -765,11 +779,27 @@
+ ap_escape_html(r->pool, r->uri)));
+ }
+
++ /* Take the repos root from DAVBasePath if configured, else the
++ * path of the enclosing section. */
++ base = conf->base ? conf->base : conf->dir;
++
+ /* resolve the resource */
+- err = (*conf->provider->repos->get_resource)(r, conf->dir,
++ err = (*conf->provider->repos->get_resource)(r, base,
+ label, use_checked_in,
+ res_p);
+ if (err != NULL) {
++ /* In the error path, give a hint that DavBasePath needs to be
++ * used if the location was configured via a regex match. */
++ if (!conf->base) {
++ core_dir_config *cdc = ap_get_core_module_config(r->per_dir_config);
++
++ if (cdc->r) {
++ ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL, APLOGNO(10484)
++ "failed to find repository for location configured "
++ "via regex match - missing DAVBasePath?");
++ }
++ }
++
+ err = dav_push_error(r->pool, err->status, 0,
+ "Could not fetch resource information.", err);
+ return err;
+@@ -5164,6 +5194,10 @@
+ AP_INIT_TAKE1("DAV", dav_cmd_dav, NULL, ACCESS_CONF,
+ "specify the DAV provider for a directory or location"),
+
++ /* per directory/location */
++ AP_INIT_TAKE1("DAVBasePath", dav_cmd_davbasepath, NULL, ACCESS_CONF,
++ "specify the DAV repository base URL"),
++
+ /* per directory/location, or per server */
+ AP_INIT_TAKE1("DAVMinTimeout", dav_cmd_davmintimeout, NULL,
+ ACCESS_CONF|RSRC_CONF,