httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Graham Leggett <minf...@sharp.fm>
Subject [Patch] DirectoryMatch/LocationMatch and configuration paths
Date Mon, 02 Mar 2015 14:29:36 GMT
Hi all,

A long standing problem in httpd has been the behaviour of the LocationMatch/DirectoryMatch
with respect to the path passed to the per directory configuration. The problem is summed
up by the following comment in http_config.h:

    /** If configuring for a directory, pathname of that directory.
     *  NOPE!  That's what it meant previous to the existence of &lt;Files&gt;,
     * &lt;Location&gt; and regex matching.  Now the only usefulness that can be
     * derived from this field is whether a command is being called in a
     * server context (path == NULL) or being called in a dir context
     * (path != NULL).  */
    char *path;

In the case of LocationMatch and DirectoryMatch, the value of path is simply the raw regular
expression.

The problem is that some modules - mod_dav and mod_dav_svn in particular, *do* use this path,
and right now it means that if “DAV on” or “DAV svn” finds itself in a LocationMatch
container, the regex is used as the base path, and the request fails.

I have created a patch that adds an optional path in front of the regular expression in LocationMatch/DirectoryMatch/FileMatch,
so you can do this:

    <DirectoryMatch /path/to/dav/ ^/path/to/dav/(?<CUSTOMERNAME>[^/]+)/>
       DAV on
    </Directory>

This gives mod_dav the option to receive a valid path, and so work inside DirectoryMatch (and
mod_dav_svn has the option to receive a valid path, and so work inside LocationMatch, more
on that in follow messages).

The above config does have a limitation though, in that all possible matches on CUSTOMERNAME
all end up sharing the same dav filesystem. What if you want one dedicated dav filesystem
per customer? Next patch addresses that.

Regards,
Graham
—

Mime
View raw message