Changes with Apache 2.0.49
+ *) Add support for IMT minor-type wildcards (e.g., text/*) to
+ ExpiresByType. PR#7991 [Ken Coar]
+
*) Fix segfault in mod_mem_cache cache_insert() due to cache size
becoming negative. PR: 21285, 21287
[Bill Stoddard, Massimo Torquati, Jean-Jacques Clar]
APACHE 2.0 STATUS: -*-text-*-
-Last modified at [$Date: 2004/02/03 15:30:57 $]
+Last modified at [$Date: 2004/02/03 21:51:38 $]
Release:
shows breakage on Solaris which can't -lcrypto -lssl without
the extra pkgconfig/openssl.pc Libs: * foo }
- * Backport wildcard ExpiresByType patch
- modules/metadata/mod_expires.c r1.45
- +1: ken, stoddard, rederpj
-
* PREREQ for another fix (stranded piped logger processes) -
ap_mpm_query(AP_MPMQ_MPM_STATE)
No updates are available at present for the BeOS or OS/2 MPMs,
typedef struct {
int active;
+ int wildcards;
char *expiresdefault;
apr_table_t *expiresbytype;
} expires_dir_config;
expires_dir_config *new =
(expires_dir_config *) apr_pcalloc(p, sizeof(expires_dir_config));
new->active = ACTIVE_DONTCARE;
+ new->wildcards = 0;
new->expiresdefault = NULL;
new->expiresbytype = apr_table_make(p, 4);
return (void *) new;
{
expires_dir_config *dir_config = in_dir_config;
char *response, *real_code;
+ char *check;
+ check = strrchr(mime, '/');
+ if ((strlen(++check) == 1) && (*check == '*')) {
+ dir_config->wildcards = 1;
+ }
+
if ((response = check_code(cmd->pool, code, &real_code)) == NULL) {
apr_table_setn(dir_config->expiresbytype, mime, real_code);
return NULL;
else {
new->expiresdefault = base->expiresdefault;
}
-
+ new->wildcards = add->wildcards;
new->expiresbytype = apr_table_overlay(p, add->expiresbytype,
base->expiresbytype);
return new;
expiry = apr_table_get(conf->expiresbytype,
ap_field_noparam(r->pool, r->content_type));
if (expiry == NULL) {
- /* Use the ExpiresDefault directive */
- expiry = conf->expiresdefault;
+ int usedefault = 1;
+ /*
+ * See if we have a wildcard entry for the major type.
+ */
+ if (conf->wildcards) {
+ char *checkmime;
+ char *spos;
+ checkmime = apr_pstrdup(r->pool, r->content_type);
+ spos = strchr(checkmime, '/');
+ if (spos != NULL) {
+ /*
+ * Without a '/' character, nothing we have will match.
+ * However, we have one.
+ */
+ if (strlen(++spos) > 0) {
+ *spos++ = '*';
+ *spos = '\0';
+ }
+ else {
+ checkmime = apr_pstrcat(r->pool, checkmime, "*", NULL);
+ }
+ expiry = apr_table_get(conf->expiresbytype, checkmime);
+ usedefault = (expiry == NULL);
+ }
+ }
+ if (usedefault) {
+ /*
+ * Use the ExpiresDefault directive
+ */
+ expiry = conf->expiresdefault;
+ }
}
if (expiry != NULL) {
set_expiration_fields(r, expiry, t);