]> granicus.if.org Git - apache/commitdiff
people often assume that their Aliases will be found by "best match" rather
authorAndre Malo <nd@apache.org>
Fri, 14 Feb 2003 03:51:01 +0000 (03:51 +0000)
committerAndre Malo <nd@apache.org>
Fri, 14 Feb 2003 03:51:01 +0000 (03:51 +0000)
than "first match". Throw out warnings, if there are obvious overlappings, e.g.:

Alias /foo     /somewhere
Alias /foo/bar /elsewhere

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@98647 13f79535-47bb-0310-9956-ffa450edef68

modules/mappers/mod_alias.c

index 3e21d6f0d63597810a016a1515a3902fd6432d47..028f0aa5ddae4659169f1d426362364e78c921a5 100644 (file)
@@ -137,6 +137,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)
@@ -145,6 +148,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. */
 
@@ -165,6 +170,26 @@ 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) {
+                ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
+                             "The %s command in line %d will probably never "
+                             "match. Check previous %sAlias commands for "
+                             "overlappings.", cmd->cmd->name,
+                             cmd->directive->line_num,
+                             p->handler ? "Script" : "");
+
+                break; /* one warning per alias should be sufficient */
+            }
+        }
+    }
+
     return NULL;
 }