Loading CHANGES +3 −0 Changes for CHANGES: 3 added lines, 0 removed lines. Original line number Diff line number Diff line Changes with Apache 2.0.51 *) mod_dir: the trailing-slash behaviour is now configurable using the DirectorySlash directive. [André Malo] *) Allow proxying of resources that are invoked via DirectoryIndex. PR 14648, 15112, 29961. [André Malo] Loading STATUS +1 −6 Changes for STATUS: 1 added line, 6 removed lines. Original line number Diff line number Diff line APACHE 2.0 STATUS: -*-text-*- Last modified at [$Date: 2004/08/15 21:35:15 $] Last modified at [$Date: 2004/08/15 21:59:57 $] Release: Loading Loading @@ -152,11 +152,6 @@ PATCHES TO BACKPORT FROM 2.1 <http://www.apache.org/~clar/detach-addrspace_APR_0_9.patch> +1: jjclar, bnicholes *) mod_dir: Backport DirectorySlash directive to work around problems with <Location>-SetHandler combinations and trailing slash redirects. modules/mappers/mod_dir.c: r1.48 +1: nd, jerenkrantz, trawick *) mod_ssl: Remove some unused functions (after CAN-2004-0488 fix is applied) http://cvs.apache.org/viewcvs.cgi/httpd-2.0/modules/ssl/ssl_util.c?r1=1.46&r2=1.47 +1: jorton Loading docs/manual/mod/mod_dir.xml +55 −1 Changes for docs/manual/mod/mod_dir.xml: 55 added lines, 1 removed line. Original line number Diff line number Diff line <?xml version="1.0"?> <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd"> <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?> <!-- $Revision: 1.4.2.4 $ --> <!-- $Revision: 1.4.2.5 $ --> <!-- Copyright 2002-2004 The Apache Software Foundation Loading Loading @@ -96,4 +96,58 @@ a directory</description> </usage> </directivesynopsis> <directivesynopsis> <name>DirectorySlash</name> <description>Toggle trailing slash redirects on or off</description> <syntax>DirectorySlash On|Off</syntax> <default>DirectorySlash On</default> <contextlist><context>server config</context><context>virtual host</context> <context>directory</context><context>.htaccess</context></contextlist> <override>Indexes</override> <compatibility>Available in version 2.1 and later</compatibility> <usage> <p>The <directive>DirectorySlash</directive> directive determines, whether <module>mod_dir</module> should fixup URLs pointing to a directory or not.</p> <p>Typically if a user requests a resource without a trailing slash, which points to a directory, <module>mod_dir</module> redirects him to the same ressource, but <em>with</em> trailing slash for some good reasons:</p> <ul> <li>The user is finally requesting the canonical URL of the resource</li> <li><module>mod_autoindex</module> works correctly. Since it doesn't emit the path in the link, it would point to the wrong path.</li> <li><directive module="mod_dir">DirectoryIndex</directive> will be evaluated <em>only</em> for directories requested with trailing slash.</li> <li>Relative URL references inside html pages will work correctly.</li> </ul> <p>Well, if you don't want this effect <em>and</em> the reasons above don't apply to you, you can turn off the redirect with:</p> <example> # see security warning below!<br /> <Location /some/path><br /> <indent> DirectorySlash Off<br /> SetHandler some-handler<br /> </indent> </Location> </example> <note type="warning"><title>Security Warning</title> <p>Turning off the trailing slash redirect may result in an information disclosure. Consider a situation where <module>mod_autoindex</module> is active (<code>Options +Indexes</code>) and <directive module="mod_dir" >DirectoryIndex</directive> is set to a valid resource (say, <code>index.html</code>) and there's no other special handler defined for that URL. In this case a request with a trailing slash would show the <code>index.html</code> file. <strong>But a request without trailing slash would list the directory contents</strong>.</p> </note> </usage> </directivesynopsis> </modulesynopsis> modules/mappers/mod_dir.c +27 −3 Changes for modules/mappers/mod_dir.c: 27 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -30,8 +30,15 @@ module AP_MODULE_DECLARE_DATA dir_module; typedef enum { SLASH_OFF = 0, SLASH_ON, SLASH_UNSET } slash_cfg; typedef struct dir_config_struct { apr_array_header_t *index_names; slash_cfg do_slash; } dir_config_rec; #define DIR_CMD_PERMS OR_INDEXES Loading @@ -47,10 +54,20 @@ static const char *add_index(cmd_parms *cmd, void *dummy, const char *arg) return NULL; } static const char *configure_slash(cmd_parms *cmd, void *d_, int arg) { dir_config_rec *d = d_; d->do_slash = arg ? SLASH_ON : SLASH_OFF; return NULL; } static const command_rec dir_cmds[] = { AP_INIT_ITERATE("DirectoryIndex", add_index, NULL, DIR_CMD_PERMS, "a list of file names"), AP_INIT_FLAG("DirectorySlash", configure_slash, NULL, DIR_CMD_PERMS, "On or Off"), {NULL} }; Loading @@ -59,6 +76,7 @@ static void *create_dir_config(apr_pool_t *p, char *dummy) dir_config_rec *new = apr_pcalloc(p, sizeof(dir_config_rec)); new->index_names = NULL; new->do_slash = SLASH_UNSET; return (void *) new; } Loading @@ -69,6 +87,8 @@ static void *merge_dir_configs(apr_pool_t *p, void *basev, void *addv) dir_config_rec *add = (dir_config_rec *)addv; new->index_names = add->index_names ? add->index_names : base->index_names; new->do_slash = (add->do_slash == SLASH_UNSET) ? base->do_slash : add->do_slash; return new; } Loading @@ -95,11 +115,18 @@ static int fixup_dir(request_rec *r) return DECLINED; } d = (dir_config_rec *)ap_get_module_config(r->per_dir_config, &dir_module); /* Redirect requests that are not '/' terminated */ if (r->uri[0] == '\0' || r->uri[strlen(r->uri) - 1] != '/') { char *ifile; if (!d->do_slash) { return DECLINED; } /* Only redirect non-get requests if we have no note to warn * that this browser cannot handle redirs on non-GET requests * (such as Microsoft's WebFolders). Loading Loading @@ -127,9 +154,6 @@ static int fixup_dir(request_rec *r) return DECLINED; } d = (dir_config_rec *)ap_get_module_config(r->per_dir_config, &dir_module); if (d->index_names) { names_ptr = (char **)d->index_names->elts; num_names = d->index_names->nelts; Loading Loading
CHANGES +3 −0 Changes for CHANGES: 3 added lines, 0 removed lines. Original line number Diff line number Diff line Changes with Apache 2.0.51 *) mod_dir: the trailing-slash behaviour is now configurable using the DirectorySlash directive. [André Malo] *) Allow proxying of resources that are invoked via DirectoryIndex. PR 14648, 15112, 29961. [André Malo] Loading
STATUS +1 −6 Changes for STATUS: 1 added line, 6 removed lines. Original line number Diff line number Diff line APACHE 2.0 STATUS: -*-text-*- Last modified at [$Date: 2004/08/15 21:35:15 $] Last modified at [$Date: 2004/08/15 21:59:57 $] Release: Loading Loading @@ -152,11 +152,6 @@ PATCHES TO BACKPORT FROM 2.1 <http://www.apache.org/~clar/detach-addrspace_APR_0_9.patch> +1: jjclar, bnicholes *) mod_dir: Backport DirectorySlash directive to work around problems with <Location>-SetHandler combinations and trailing slash redirects. modules/mappers/mod_dir.c: r1.48 +1: nd, jerenkrantz, trawick *) mod_ssl: Remove some unused functions (after CAN-2004-0488 fix is applied) http://cvs.apache.org/viewcvs.cgi/httpd-2.0/modules/ssl/ssl_util.c?r1=1.46&r2=1.47 +1: jorton Loading
docs/manual/mod/mod_dir.xml +55 −1 Changes for docs/manual/mod/mod_dir.xml: 55 added lines, 1 removed line. Original line number Diff line number Diff line <?xml version="1.0"?> <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd"> <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?> <!-- $Revision: 1.4.2.4 $ --> <!-- $Revision: 1.4.2.5 $ --> <!-- Copyright 2002-2004 The Apache Software Foundation Loading Loading @@ -96,4 +96,58 @@ a directory</description> </usage> </directivesynopsis> <directivesynopsis> <name>DirectorySlash</name> <description>Toggle trailing slash redirects on or off</description> <syntax>DirectorySlash On|Off</syntax> <default>DirectorySlash On</default> <contextlist><context>server config</context><context>virtual host</context> <context>directory</context><context>.htaccess</context></contextlist> <override>Indexes</override> <compatibility>Available in version 2.1 and later</compatibility> <usage> <p>The <directive>DirectorySlash</directive> directive determines, whether <module>mod_dir</module> should fixup URLs pointing to a directory or not.</p> <p>Typically if a user requests a resource without a trailing slash, which points to a directory, <module>mod_dir</module> redirects him to the same ressource, but <em>with</em> trailing slash for some good reasons:</p> <ul> <li>The user is finally requesting the canonical URL of the resource</li> <li><module>mod_autoindex</module> works correctly. Since it doesn't emit the path in the link, it would point to the wrong path.</li> <li><directive module="mod_dir">DirectoryIndex</directive> will be evaluated <em>only</em> for directories requested with trailing slash.</li> <li>Relative URL references inside html pages will work correctly.</li> </ul> <p>Well, if you don't want this effect <em>and</em> the reasons above don't apply to you, you can turn off the redirect with:</p> <example> # see security warning below!<br /> <Location /some/path><br /> <indent> DirectorySlash Off<br /> SetHandler some-handler<br /> </indent> </Location> </example> <note type="warning"><title>Security Warning</title> <p>Turning off the trailing slash redirect may result in an information disclosure. Consider a situation where <module>mod_autoindex</module> is active (<code>Options +Indexes</code>) and <directive module="mod_dir" >DirectoryIndex</directive> is set to a valid resource (say, <code>index.html</code>) and there's no other special handler defined for that URL. In this case a request with a trailing slash would show the <code>index.html</code> file. <strong>But a request without trailing slash would list the directory contents</strong>.</p> </note> </usage> </directivesynopsis> </modulesynopsis>
modules/mappers/mod_dir.c +27 −3 Changes for modules/mappers/mod_dir.c: 27 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -30,8 +30,15 @@ module AP_MODULE_DECLARE_DATA dir_module; typedef enum { SLASH_OFF = 0, SLASH_ON, SLASH_UNSET } slash_cfg; typedef struct dir_config_struct { apr_array_header_t *index_names; slash_cfg do_slash; } dir_config_rec; #define DIR_CMD_PERMS OR_INDEXES Loading @@ -47,10 +54,20 @@ static const char *add_index(cmd_parms *cmd, void *dummy, const char *arg) return NULL; } static const char *configure_slash(cmd_parms *cmd, void *d_, int arg) { dir_config_rec *d = d_; d->do_slash = arg ? SLASH_ON : SLASH_OFF; return NULL; } static const command_rec dir_cmds[] = { AP_INIT_ITERATE("DirectoryIndex", add_index, NULL, DIR_CMD_PERMS, "a list of file names"), AP_INIT_FLAG("DirectorySlash", configure_slash, NULL, DIR_CMD_PERMS, "On or Off"), {NULL} }; Loading @@ -59,6 +76,7 @@ static void *create_dir_config(apr_pool_t *p, char *dummy) dir_config_rec *new = apr_pcalloc(p, sizeof(dir_config_rec)); new->index_names = NULL; new->do_slash = SLASH_UNSET; return (void *) new; } Loading @@ -69,6 +87,8 @@ static void *merge_dir_configs(apr_pool_t *p, void *basev, void *addv) dir_config_rec *add = (dir_config_rec *)addv; new->index_names = add->index_names ? add->index_names : base->index_names; new->do_slash = (add->do_slash == SLASH_UNSET) ? base->do_slash : add->do_slash; return new; } Loading @@ -95,11 +115,18 @@ static int fixup_dir(request_rec *r) return DECLINED; } d = (dir_config_rec *)ap_get_module_config(r->per_dir_config, &dir_module); /* Redirect requests that are not '/' terminated */ if (r->uri[0] == '\0' || r->uri[strlen(r->uri) - 1] != '/') { char *ifile; if (!d->do_slash) { return DECLINED; } /* Only redirect non-get requests if we have no note to warn * that this browser cannot handle redirs on non-GET requests * (such as Microsoft's WebFolders). Loading Loading @@ -127,9 +154,6 @@ static int fixup_dir(request_rec *r) return DECLINED; } d = (dir_config_rec *)ap_get_module_config(r->per_dir_config, &dir_module); if (d->index_names) { names_ptr = (char **)d->index_names->elts; num_names = d->index_names->nelts; Loading