]> granicus.if.org Git - apache/commitdiff
Add DUMP_MODULES
authorPaul Querna <pquerna@apache.org>
Sat, 10 Jul 2004 03:38:02 +0000 (03:38 +0000)
committerPaul Querna <pquerna@apache.org>
Sat, 10 Jul 2004 03:38:02 +0000 (03:38 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@104213 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/manual/programs/httpd.xml
include/http_main.h
modules/mappers/mod_so.c
modules/mappers/mod_so.h
server/main.c

diff --git a/CHANGES b/CHANGES
index c0b5b0f64587dc9c89426866236494bdc4d83f09..fd766ebcc4519a6a0d5faef9be07fcd2cc384ff0 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,11 @@ Changes with Apache 2.1.0-dev
 
   [Remove entries to the current 2.0 section below, when backported]
 
+  *) mod_so, core: Add new command line options to print all loaded
+     modules. '-t -D DUMP_MODULES' and '-M' will show all static 
+     and shared modules as loaded from the configuration file.
+     [Paul Querna]
+
   *) mod_autoindex: Add ShowForbidden to IndexOptions to list files
      that are not shown because the subrequest returned 401 or 403. 
      PR 10575.  [Paul Querna]
index 6fe67e32308d18048c257f72516d9fe9e646a707..02421f5703ca7097d6c25b592f02bdecd5bec1c6 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version='1.0' encoding='UTF-8' ?>
 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
-<!-- $Revision: 1.10 $ -->
+<!-- $Revision: 1.11 $ -->
 
 <!--
  Copyright 2002-2004 The Apache Software Foundation
@@ -54,7 +54,7 @@
      [ -<strong>R</strong> <var>directory</var> ] [ -<strong>h</strong> ]
      [ -<strong>l</strong> ] [ -<strong>L</strong> ] [ -<strong>S</strong> ]
      [ -<strong>t</strong> ] [ -<strong>v</strong> ] [ -<strong>V</strong> ]
-     [ -<strong>X</strong> ]</code></p>
+     [ -<strong>X</strong> ] [ -<strong>M</strong> ]</code></p>
 
      <p>On <a href="../platform/windows.html">Windows systems</a>, the
      following additional arguments are available:</p>
@@ -138,6 +138,10 @@ the <directive module="mod_so">LoadModule</directive> directive.</dd>
 <dd>Output a list of directives together with expected arguments and
 places where the directive is valid.</dd>
 
+<dt><code>-M</code></dt>
+
+<dd>Dump a list of loaded Static and Shared Modules.</dd>
+
 <dt><code>-S</code></dt>
 
 <dd>Show the settings as parsed from the config file (currently only
@@ -149,7 +153,8 @@ shows the virtualhost settings).</dd>
 immediately exits after these syntax parsing tests with either a return code
 of 0 (Syntax OK) or return code not equal to 0 (Syntax Error).  If -D
 <var>DUMP</var>_<var>VHOSTS </var>is also set, details of the virtual host
-configuration will be printed.</dd>
+configuration will be printed. If -D <var>DUMP</var>_<var>MODULES </var> is
+set, all loaded modules will be printed.</dd>
 
 <dt><code>-v</code></dt>
 
index 912062967fdccc28e4a0816dda353c07f288090b..cfe3f81d275aaf0c18e2a5470825952ca45c4f44 100644 (file)
@@ -22,7 +22,7 @@
  * in apr_getopt() format.  Use this for default'ing args that the MPM
  * can safely ignore and pass on from its rewrite_args() handler.
  */
-#define AP_SERVER_BASEARGS "C:c:D:d:E:e:f:vVlLtSh?X"
+#define AP_SERVER_BASEARGS "C:c:D:d:E:e:f:vVlLtSMh?X"
 
 #ifdef __cplusplus
 extern "C" {
index 9088d7f9ff3853d5575e151cf23c0e0757dfd219..4ae1ed3425455a2804cacb956a9769d3657339ed 100644 (file)
@@ -347,6 +347,39 @@ static module *ap_find_loaded_module_symbol(server_rec *s, const char *modname)
     return NULL;
 }
 
+static void ap_dump_loaded_modules(apr_pool_t* p, server_rec* s)
+{
+    ap_module_symbol_t *modie;
+    ap_module_symbol_t *modi;
+    so_server_conf *sconf;
+    module *modp;
+    int i;
+    apr_file_t *out = NULL;
+    apr_file_open_stderr(&out, p);
+
+    apr_file_printf(out, "Loaded Modules:\n");
+
+    sconf = (so_server_conf *)ap_get_module_config(s->module_config, 
+                                                   &so_module);
+    for (i = 0; ; i++) {
+        modi = &ap_prelinked_module_symbols[i];
+        if (modi->name != NULL) {
+            apr_file_printf(out, " %s (static)\n", modi->name);
+        }
+        else {
+            break;
+        }
+    }
+
+    modie = (ap_module_symbol_t *)sconf->loaded_modules->elts;
+    for (i = 0; i < sconf->loaded_modules->nelts; i++) {
+        modi = &modie[i];
+        if (modi->name != NULL) {
+            apr_file_printf(out, " %s (shared)\n", modi->name);
+        }
+    }
+}
+
 #else /* not NO_DLOPEN */
 
 static const char *load_file(cmd_parms *cmd, void *dummy, const char *filename)
@@ -370,6 +403,7 @@ static void register_hooks(apr_pool_t *p)
 {
 #ifndef NO_DLOPEN
     APR_REGISTER_OPTIONAL_FN(ap_find_loaded_module_symbol);
+    APR_REGISTER_OPTIONAL_FN(ap_dump_loaded_modules);
 #endif
 }
 
index 514ba6c932cd702a8595f138759cc067e4a96197..8c32c820b23900b095ba4b0ac7b1749e9b517f24 100644 (file)
@@ -22,6 +22,8 @@
 /* optional function declaration */
 APR_DECLARE_OPTIONAL_FN(module *, ap_find_loaded_module_symbol,
                         (server_rec *s, const char *modname));
+APR_DECLARE_OPTIONAL_FN(void, ap_dump_loaded_modules,
+                        (apr_pool_t* p, server_rec *s));
 
 #endif /* MOD_SO_H */
 
index 21a8a13cd77196eb62410f50bdb069e8bdcdb690..46a72c9489ffc1c41e249d2c07e49a4a9420ac48 100644 (file)
@@ -36,6 +36,8 @@
 #include "ap_mpm.h"
 #include "mpm_common.h"
 
+#include "mod_so.h" /* for dumping loaded modules */
+
 /* WARNING: Win32 binds http_main.c dynamically to the server. Please place
  *          extern functions and global data in another appropriate module.
  *
@@ -327,75 +329,79 @@ static void usage(process_rec *process)
 
 #ifdef SHARED_CORE
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -R directory      : specify an alternate location for "
+                 "  -R directory       : specify an alternate location for "
                  "shared object files");
 #endif
 
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -D name           : define a name for use in "
+                 "  -D name            : define a name for use in "
                  "<IfDefine name> directives");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -d directory      : specify an alternate initial "
+                 "  -d directory       : specify an alternate initial "
                  "ServerRoot");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -f file           : specify an alternate ServerConfigFile");
+                 "  -f file            : specify an alternate ServerConfigFile");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -C \"directive\"    : process directive before reading "
+                 "  -C \"directive\"     : process directive before reading "
                  "config files");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -c \"directive\"    : process directive after reading "
+                 "  -c \"directive\"     : process directive after reading "
                  "config files");
 
 #ifdef NETWARE
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -n name           : set screen name");
+                 "  -n name            : set screen name");
 #endif
 #ifdef WIN32
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -n name           : set service name and use its "
+                 "  -n name            : set service name and use its "
                  "ServerConfigFile");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -k start          : tell Apache to start");
+                 "  -k start           : tell Apache to start");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -k restart        : tell running Apache to do a graceful "
+                 "  -k restart         : tell running Apache to do a graceful "
                  "restart");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -k stop|shutdown  : tell running Apache to shutdown");
+                 "  -k stop|shutdown   : tell running Apache to shutdown");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -k install        : install an Apache service");
+                 "  -k install         : install an Apache service");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -k config         : change startup Options of an Apache "
+                 "  -k config          : change startup Options of an Apache "
                  "service");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -k uninstall      : uninstall an Apache service");
+                 "  -k uninstall       : uninstall an Apache service");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -w                : hold open the console window on error");
+                 "  -w                 : hold open the console window on error");
 #endif
 
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -e level          : show startup errors of level "
+                 "  -e level           : show startup errors of level "
                  "(see LogLevel)");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -E file           : log startup errors to file");
+                 "  -E file            : log startup errors to file");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -v                : show version number");
+                 "  -v                 : show version number");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -V                : show compile settings");
+                 "  -V                 : show compile settings");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -h                : list available command line options "
+                 "  -h                 : list available command line options "
                  "(this page)");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -l                : list compiled in modules");
+                 "  -l                 : list compiled in modules");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -L                : list available configuration "
+                 "  -L                 : list available configuration "
                  "directives");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -t -D DUMP_VHOSTS : show parsed settings (currently only "
+                 "  -t -D DUMP_VHOSTS  : show parsed settings (currently only "
                  "vhost settings)");
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -S                : a synonym for -t -D DUMP_VHOSTS");   
+                 "  -S                 : a synonym for -t -D DUMP_VHOSTS");   
+    ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
+                 "  -t -D DUMP_MODULES : show all loaded modules ");
+    ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
+                 "  -M                 : a synonym for -t -D DUMP_MODULES");   
     ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
-                 "  -t                : run syntax check for config files");
+                 "  -t                 : run syntax check for config files");
 
     destroy_and_exit_process(process, 1);
 }
@@ -481,6 +487,9 @@ int main(int argc, const char * const argv[])
             /* Setting -D DUMP_VHOSTS is equivalent to setting -S */
             if (strcmp(optarg, "DUMP_VHOSTS") == 0)
                 configtestonly = 1;
+            /* Setting -D DUMP_MODULES is equivalent to setting -M */
+            if (strcmp(optarg, "DUMP_MODULES") == 0)
+                configtestonly = 1;
             break;
 
         case 'e':
@@ -552,6 +561,12 @@ int main(int argc, const char * const argv[])
             new = (char **)apr_array_push(ap_server_config_defines);
             *new = "DUMP_VHOSTS";
             break;
+
+        case 'M':
+            configtestonly = 1;
+            new = (char **)apr_array_push(ap_server_config_defines);
+            *new = "DUMP_MODULES";
+            break;
             
         case 'h':
         case '?':
@@ -593,9 +608,17 @@ int main(int argc, const char * const argv[])
     rv = ap_process_config_tree(server_conf, ap_conftree,
                                 process->pconf, ptemp);
     if (rv == OK) {
+        APR_OPTIONAL_FN_TYPE(ap_dump_loaded_modules) *dump_modules =
+            APR_RETRIEVE_OPTIONAL_FN(ap_dump_loaded_modules);
+        
         ap_fixup_virtual_hosts(pconf, server_conf);
         ap_fini_vhost_config(pconf, server_conf);
         apr_hook_sort_all();
+
+        if (dump_modules && ap_exists_config_define("DUMP_MODULES")) {
+            dump_modules(pconf, server_conf);
+        }
+
         if (configtestonly) {
             ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, "Syntax OK");
             destroy_and_exit_process(process, 0);