]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Prevent an Apache module from being loaded or added twice due
authorWilliam A. Rowe Jr <wrowe@apache.org>
Sat, 10 Nov 2001 19:01:29 +0000 (19:01 +0000)
committerWilliam A. Rowe Jr <wrowe@apache.org>
Sat, 10 Nov 2001 19:01:29 +0000 (19:01 +0000)
     to duplicate LoadModule or AddModule directives (or a missing
     ClearModuleList directive).

     LoadModule dupcheck (for 2.0) by Brian Pane <bpane@pacbell.net>
     Ported and added AddModule dupcheck by Will Rowe
     Identified by an old collegue of Will's who tripped over this.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x@91836 13f79535-47bb-0310-9956-ffa450edef68

src/CHANGES
src/main/http_core.c
src/modules/standard/mod_so.c

index 7b05390628a15fd8223dd8be18d5deb30d12f148..e5383c851d0a90094fd313b823773cb33580ac1f 100644 (file)
@@ -1,5 +1,10 @@
 Changes with Apache 1.3.23
 
+  *) Prevent an Apache module from being loaded or added twice due
+     to duplicate LoadModule or AddModule directives (or a missing
+     ClearModuleList directive).
+     [William Rowe, Brian Pane <bpane@pacbell.net>]
+
   *) Add checkgid app to do run-time validation of Group directive
      values which might cause the server to fall over, but which
      are syntactically correct.  [Ken Coar]
index e845f1a96d1b6e47c212abbc6ac3138ca5b40955..a5ba80ecbe8609e9144fdb8e0e01b764f1903e01 100644 (file)
@@ -1908,11 +1908,20 @@ static const char *set_server_alias(cmd_parms *cmd, void *dummy,
 
 static const char *add_module_command(cmd_parms *cmd, void *dummy, char *arg)
 {
+    module *modp;
     const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
     if (err != NULL) {
         return err;
     }
 
+    for (modp = top_module; modp; modp = modp->next) {
+        if (modp->name != NULL && strcmp(modp->name, arg) == 0) {
+            ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, cmd->server,
+                          "module %s is already added, skipping", arg);
+            return NULL;
+        }
+    }
+
     if (!ap_add_named_module(arg)) {
        return ap_pstrcat(cmd->pool, "Cannot add module via name '", arg, 
                          "': not in list of loaded modules", NULL);
index 49c4ade8a90ebc73af1a358fd1f8625eb0c4937f..e5bd0f375d97be45d30fe0f226ee205ab8bd1131 100644 (file)
@@ -231,8 +231,11 @@ static const char *load_module(cmd_parms *cmd, void *dummy,
     modie = (moduleinfo *)sconf->loaded_modules->elts;
     for (i = 0; i < sconf->loaded_modules->nelts; i++) {
         modi = &modie[i];
-        if (modi->name != NULL && strcmp(modi->name, modname) == 0)
+        if (modi->name != NULL && strcmp(modi->name, modname) == 0) {
+            ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, cmd->server,
+                          "module %s is already loaded, skipping", modname);
             return NULL;
+        }
     }
     modi = ap_push_array(sconf->loaded_modules);
     modi->name = modname;