You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by co...@apache.org on 2019/03/13 18:41:30 UTC
svn commit: r1855449 - in /httpd/httpd/trunk: CHANGES
docs/manual/mod/mod_mime.xml modules/http/mod_mime.c
Author: covener
Date: Wed Mar 13 18:41:30 2019
New Revision: 1855449
URL: http://svn.apache.org/viewvc?rev=1855449&view=rev
Log:
mod_mime: Add `MimeOptions`
mod_mime: Add `MimeOptions` directive to allow Content-Type or all metadata
detection to use only the last (right-most) file extension.
Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/docs/manual/mod/mod_mime.xml
httpd/httpd/trunk/modules/http/mod_mime.c
Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1855449&r1=1855448&r2=1855449&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Wed Mar 13 18:41:30 2019
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with Apache 2.5.1
+ *) mod_mime: Add `MimeOptions` directive to allow Content-Type or all metadata
+ detection to use only the last (right-most) file extension. [Eric Covener]
+
*) MPMs unix: bind the bucket number of each child to its slot number, for a
more efficient per bucket maintenance. [Yann Ylavic]
Modified: httpd/httpd/trunk/docs/manual/mod/mod_mime.xml
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_mime.xml?rev=1855449&r1=1855448&r2=1855449&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/mod/mod_mime.xml (original)
+++ httpd/httpd/trunk/docs/manual/mod/mod_mime.xml Wed Mar 13 18:41:30 2019
@@ -1051,4 +1051,38 @@ RemoveType .cgi
<seealso><module>mod_mime_magic</module></seealso>
</directivesynopsis>
+<directivesynopsis>
+<name>MimeOptions</name>
+<description>Configures mod_mime behavior</description>
+<syntax>MimeOptions<var>option</var> [<var>option</var>] ...</syntax>
+<contextlist><context>server config</context>
+<context>virtual host</context><context>directory</context>
+<context>.htaccess</context>
+<compatibility>IBM HTTP Server 9.0.0.12 and later</compatibility>
+</contextlist>
+<override>FileInfo</override>
+
+<usage>
+ <p>The <directive>MimeOptions</directive> directive configures certain
+ behaviors of <module>mod_mime</module>. <var>Option</var> can
+ be one of</p>
+
+ <dl>
+ <dt><code>TypesLastExtension</code></dt>
+ <dd>This option only consider the last (right-most) filename extension
+ when determining a files Content-Type.</dd>
+ <dt><code>NoTypesLastExtension</code></dt>
+ <dd>This option can be used to revert to the default behavior of testing
+ every filename extension when determining a files Content-Type.</dd>
+ <dt><code>AllLastExtension</code></dt>
+ <dd>This option only consider the last (right-most) filename extension
+ when determining any response metadata (Content-Type, language, encoding,
+ etc.) .</dd>
+ <dt><code>NoAllLastExtension</code></dt>
+ <dd>This option can be used to revert to the default behavior of testing
+ every filename extension when determining any response metadata
+ (Content-Type, language, encoding, etc.) .</dd>
+ </dl>
+</usage>
+</directivesynopsis>
</modulesynopsis>
Modified: httpd/httpd/trunk/modules/http/mod_mime.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http/mod_mime.c?rev=1855449&r1=1855448&r2=1855449&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http/mod_mime.c (original)
+++ httpd/httpd/trunk/modules/http/mod_mime.c Wed Mar 13 18:41:30 2019
@@ -91,6 +91,10 @@ typedef struct {
* If set to 2, this value is unset and is
* effectively 0.
*/
+ /* Only use the final extension for Content-Type */
+ enum {CT_LAST_INIT, CT_LAST_ON, CT_LAST_OFF} ct_last_ext;
+ /* Only use the final extension for anything */
+ enum {ALL_LAST_INIT, ALL_LAST_ON, ALL_LAST_OFF} all_last_ext;
} mime_dir_config;
typedef struct param_s {
@@ -127,6 +131,8 @@ static void *create_mime_dir_config(apr_
new->multimatch = MULTIMATCH_UNSET;
new->use_path_info = 2;
+ new->ct_last_ext = CT_LAST_INIT;
+ new->all_last_ext = ALL_LAST_INIT;
return new;
}
@@ -239,6 +245,13 @@ static void *merge_mime_dir_configs(apr_
new->use_path_info = base->use_path_info;
}
+ new->ct_last_ext = (add->ct_last_ext != CT_LAST_INIT)
+ ? add->ct_last_ext
+ : base->ct_last_ext;
+ new->all_last_ext = (add->all_last_ext != ALL_LAST_INIT)
+ ? add->all_last_ext
+ : base->all_last_ext;
+
return new;
}
@@ -364,6 +377,33 @@ static const char *multiviews_match(cmd_
return NULL;
}
+static const char *add_mime_options(cmd_parms *cmd, void *in_dc,
+ const char *flag)
+{
+ mime_dir_config *dc = in_dc;
+
+ if (!strcasecmp(flag, "TypesLastExtension")) {
+ dc->ct_last_ext = CT_LAST_ON;
+ }
+ else if (!strcasecmp(flag, "NoTypesLastExtension")) {
+ dc->ct_last_ext = CT_LAST_OFF;
+ }
+ else if (!strcasecmp(flag, "AllLastExtension")) {
+ dc->all_last_ext = ALL_LAST_ON;
+ }
+ else if (!strcasecmp(flag, "AllLastExtension")) {
+ dc->all_last_ext = ALL_LAST_OFF;
+ }
+ else {
+ return apr_pstrcat(cmd->temp_pool,
+ "Invalid MimeOptions option: ",
+ flag,
+ NULL);
+ }
+
+ return NULL;
+}
+
static const command_rec mime_cmds[] =
{
AP_INIT_ITERATE2("AddCharset", add_extension_info,
@@ -421,6 +461,11 @@ static const command_rec mime_cmds[] =
AP_INIT_FLAG("ModMimeUsePathInfo", ap_set_flag_slot,
(void *)APR_OFFSETOF(mime_dir_config, use_path_info), ACCESS_CONF,
"Set to 'yes' to allow mod_mime to use path info for type checking"),
+ AP_INIT_ITERATE("MimeOptions",
+ add_mime_options,
+ NULL,
+ OR_FILEINFO,
+ "valid options: [No]TypesLastExtension, [No]AllLastExtension"),
{NULL}
};
@@ -817,11 +862,17 @@ static int find_ct(request_rec *r)
const extension_info *exinfo = NULL;
int found;
char *extcase;
+ int skipct = (conf->ct_last_ext == CT_LAST_ON) && (*fn);
+ int skipall = (conf->all_last_ext == ALL_LAST_ON) && (*fn);
if (*ext == '\0') { /* ignore empty extensions "bad..html" */
continue;
}
+ if (skipall) {
+ continue;
+ }
+
found = 0;
/* Save the ext in extcase before converting it to lower case.
@@ -834,7 +885,7 @@ static int find_ct(request_rec *r)
ext, APR_HASH_KEY_STRING);
}
- if (exinfo == NULL || !exinfo->forced_type) {
+ if ((exinfo == NULL || !exinfo->forced_type) && !skipct) {
if ((type = apr_hash_get(mime_type_extensions, ext,
APR_HASH_KEY_STRING)) != NULL) {
ap_set_content_type(r, (char*) type);
@@ -845,7 +896,7 @@ static int find_ct(request_rec *r)
if (exinfo != NULL) {
/* empty string is treated as special case for RemoveType */
- if (exinfo->forced_type && *exinfo->forced_type) {
+ if ((exinfo->forced_type && *exinfo->forced_type) && !skipct) {
ap_set_content_type(r, exinfo->forced_type);
found = 1;
}
Re: svn commit: r1855449 - in /httpd/httpd/trunk: CHANGES
docs/manual/mod/mod_mime.xml modules/http/mod_mime.c
Posted by Eric Covener <co...@gmail.com>.
On Wed, Mar 13, 2019 at 3:56 PM Ruediger Pluem <rp...@apache.org> wrote:
>
>
>
> On 03/13/2019 07:41 PM, covener@apache.org wrote:
> > Author: covener
> > Date: Wed Mar 13 18:41:30 2019
> > New Revision: 1855449
> >
> > URL: http://svn.apache.org/viewvc?rev=1855449&view=rev
> > Log:
> > mod_mime: Add `MimeOptions`
Thanks for spotting both!
Re: svn commit: r1855449 - in /httpd/httpd/trunk: CHANGES
docs/manual/mod/mod_mime.xml modules/http/mod_mime.c
Posted by Ruediger Pluem <rp...@apache.org>.
On 03/13/2019 07:41 PM, covener@apache.org wrote:
> Author: covener
> Date: Wed Mar 13 18:41:30 2019
> New Revision: 1855449
>
> URL: http://svn.apache.org/viewvc?rev=1855449&view=rev
> Log:
> mod_mime: Add `MimeOptions`
>
> mod_mime: Add `MimeOptions` directive to allow Content-Type or all metadata
> detection to use only the last (right-most) file extension.
>
>
> Modified:
> httpd/httpd/trunk/CHANGES
> httpd/httpd/trunk/docs/manual/mod/mod_mime.xml
> httpd/httpd/trunk/modules/http/mod_mime.c
>
>
> Modified: httpd/httpd/trunk/docs/manual/mod/mod_mime.xml
> URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_mime.xml?rev=1855449&r1=1855448&r2=1855449&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/docs/manual/mod/mod_mime.xml (original)
> +++ httpd/httpd/trunk/docs/manual/mod/mod_mime.xml Wed Mar 13 18:41:30 2019
> @@ -1051,4 +1051,38 @@ RemoveType .cgi
> <seealso><module>mod_mime_magic</module></seealso>
> </directivesynopsis>
>
> +<directivesynopsis>
> +<name>MimeOptions</name>
> +<description>Configures mod_mime behavior</description>
> +<syntax>MimeOptions<var>option</var> [<var>option</var>] ...</syntax>
> +<contextlist><context>server config</context>
> +<context>virtual host</context><context>directory</context>
> +<context>.htaccess</context>
> +<compatibility>IBM HTTP Server 9.0.0.12 and later</compatibility>
:-)
> Modified: httpd/httpd/trunk/modules/http/mod_mime.c
> URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http/mod_mime.c?rev=1855449&r1=1855448&r2=1855449&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/modules/http/mod_mime.c (original)
> +++ httpd/httpd/trunk/modules/http/mod_mime.c Wed Mar 13 18:41:30 2019
> @@ -364,6 +377,33 @@ static const char *multiviews_match(cmd_
> return NULL;
> }
>
> +static const char *add_mime_options(cmd_parms *cmd, void *in_dc,
> + const char *flag)
> +{
> + mime_dir_config *dc = in_dc;
> +
> + if (!strcasecmp(flag, "TypesLastExtension")) {
> + dc->ct_last_ext = CT_LAST_ON;
> + }
> + else if (!strcasecmp(flag, "NoTypesLastExtension")) {
> + dc->ct_last_ext = CT_LAST_OFF;
> + }
> + else if (!strcasecmp(flag, "AllLastExtension")) {
> + dc->all_last_ext = ALL_LAST_ON;
> + }
> + else if (!strcasecmp(flag, "AllLastExtension")) {
I guess it should be NoAllLastExtension.
> + dc->all_last_ext = ALL_LAST_OFF;
> + }
> + else {
> + return apr_pstrcat(cmd->temp_pool,
> + "Invalid MimeOptions option: ",
> + flag,
> + NULL);
> + }
> +
> + return NULL;
> +}
> +
> static const command_rec mime_cmds[] =
> {
> AP_INIT_ITERATE2("AddCharset", add_extension_info,
Regards
RĂ¼diger