Commit a02cf3d4 authored by Andre Malo's avatar Andre Malo
Browse files

Emit a warning if an alias overlaps another.

Reviewed by: Brad Nicholes, Jean-Jacques Clar


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/APACHE_2_0_BRANCH@103950 13f79535-47bb-0310-9956-ffa450edef68
parent 7ed4e4fe
Loading
Loading
Loading
Loading
+3 −0
Changes for CHANGES: 3 added lines, 0 removed lines.
Original line number Diff line number Diff line
Changes with Apache 2.0.50
  *) mod_alias now emits a warning if it detects overlapping *Alias*
     directives.  [André Malo]
  *) mod_rewrite no longer turns forward proxy requests into reverse proxy
     requests. PR 28125  [ast domdv.de, André Malo]
+1 −5
Changes for STATUS: 1 added line, 5 removed lines.
Original line number Diff line number Diff line
APACHE 2.0 STATUS:                                              -*-text-*-
Last modified at [$Date: 2004/06/14 17:48:10 $]
Last modified at [$Date: 2004/06/14 22:09:41 $]

Release:

@@ -180,10 +180,6 @@ PATCHES TO BACKPORT FROM 2.1
          modules/filters/mod_include.c: r1.296
       +1: nd

    *) mod_alias: Emit a warning if an alias overlaps another
          modules/mappers/mod_alias.c: r1.45, 1.46, 1.47, 1.48, 1.55
      +1: nd, bnicholes, jjclar

    *) Fixed mean and median calculations in ab, also changed where time values
       are set for start and connect when doing keep alive benchmarking.
           support/ab.c: r1.143
+28 −0
Changes for modules/mappers/mod_alias.c: 28 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -94,6 +94,9 @@ static void *merge_alias_dir_config(apr_pool_t *p, void *basev, void *overridesv
    return a;
}

/* need prototype for overlap check */
static int alias_matches(const char *uri, const char *alias_fakename);

static const char *add_alias_internal(cmd_parms *cmd, void *dummy,
                                      const char *f, const char *r,
                                      int use_regex)
@@ -102,6 +105,8 @@ static const char *add_alias_internal(cmd_parms *cmd, void *dummy,
    alias_server_conf *conf = ap_get_module_config(s->module_config,
                                                   &alias_module);
    alias_entry *new = apr_array_push(conf->aliases);
    alias_entry *entries = (alias_entry *)conf->aliases->elts;
    int i;

    /* XX r can NOT be relative to DocumentRoot here... compat bug. */

@@ -122,6 +127,29 @@ static const char *add_alias_internal(cmd_parms *cmd, void *dummy,
    new->fake = f;
    new->handler = cmd->info;

    /* check for overlapping (Script)Alias directives
     * and throw a warning if found one
     */
    if (!use_regex) {
        for (i = 0; i < conf->aliases->nelts - 1; ++i) {
            alias_entry *p = &entries[i];

            if (  (!p->regexp &&  alias_matches(f, p->fake) > 0)
                || (p->regexp && !ap_regexec(p->regexp, f, 0, NULL, 0))) {
                ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
                             "The %s directive in %s at line %d will probably "
                             "never match because it overlaps an earlier "
                             "%sAlias%s.",
                             cmd->cmd->name, cmd->directive->filename,
                             cmd->directive->line_num,
                             p->handler ? "Script" : "",
                             p->regexp ? "Match" : "");

                break; /* one warning per alias should be sufficient */
            }
        }
    }

    return NULL;
}