]> granicus.if.org Git - apache/commitdiff
The pre_config hook now takes a return value. This allows modules to
authorAaron Bannert <aaron@apache.org>
Mon, 28 Jan 2002 23:49:40 +0000 (23:49 +0000)
committerAaron Bannert <aaron@apache.org>
Mon, 28 Jan 2002 23:49:40 +0000 (23:49 +0000)
cause the server to bail out under error conditions.

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

17 files changed:
include/ap_mmn.h
include/http_config.h
modules/arch/netware/mod_nw_ssl.c
modules/experimental/mod_example.c
modules/loggers/mod_log_config.c
modules/metadata/mod_headers.c
modules/ssl/mod_ssl.c
server/config.c
server/main.c
server/mpm/beos/beos.c
server/mpm/experimental/perchild/perchild.c
server/mpm/mpmt_os2/mpmt_os2.c
server/mpm/netware/mpm_netware.c
server/mpm/perchild/perchild.c
server/mpm/prefork/prefork.c
server/mpm/winnt/mpm_winnt.c
server/mpm/worker/worker.c

index 8e5a0aaf27b5b8656189b708987b542b23dfac1d..9cc96c832ce62aafc2f4f001dccb84967ad10a1c 100644 (file)
@@ -94,6 +94,7 @@
  *                       a GET request
  * 20020118 (2.0.31-dev) Input filtering split of blocking and mode
  * 20020127 (2.0.31-dev) bump for pre_mpm hook change
+ * 20020128 (2.0.31-dev) bump for pre_config hook change
  */
 
 #define MODULE_MAGIC_COOKIE 0x41503230UL /* "AP20" */
index 22b901e282dc1dbe8ef86b0a2c1f2ce7c9fe0fdb..9ef52f0d04c3a24341f6067888d97b2d2040834d 100644 (file)
@@ -970,8 +970,9 @@ AP_DECLARE_HOOK(int,header_parser,(request_rec *r))
  * @param pconf The config pool
  * @param plog The logging streams pool
  * @param ptemp The temporary pool
+ * @return OK or DECLINED on success anything else is a error
  */
-AP_DECLARE_HOOK(void,pre_config,(apr_pool_t *pconf,apr_pool_t *plog,apr_pool_t *ptemp))
+AP_DECLARE_HOOK(int,pre_config,(apr_pool_t *pconf,apr_pool_t *plog,apr_pool_t *ptemp))
 
 /**
  * Run the post_config function for each module
index f507fab74a80f69502671be8caebc1aaed066b11..ab8cec51e4190312a6b930009a455be8fb91acc3 100644 (file)
@@ -334,10 +334,12 @@ static apr_status_t nwssl_socket_cleanup(void *data)
     return APR_SUCCESS;
 }
 
-static void nwssl_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
+static int nwssl_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
                          apr_pool_t *ptemp)
 {
     ap_seclisteners = NULL;
+
+    return OK;
 }
 
 static int nwssl_post_config(apr_pool_t *pconf, apr_pool_t *plog,
index dfeba1119c96d7a68b79a79567dda2d67f5778e1..a42926bfa3408e92482e38e0489e9cbc56aaedf6 100644 (file)
@@ -847,13 +847,15 @@ static void *x_merge_server_config(apr_pool_t *p, void *server1_conf,
  * This routine is called before the server processes the configuration
  * files.  There is no return value.
  */
-static void x_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
-                         apr_pool_t *ptemp)
+static int x_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
+                        apr_pool_t *ptemp)
 {
     /*
      * Log the call and exit.
      */
     trace_add(NULL, NULL, NULL, "x_pre_config()");
+
+    return OK;
 }
 
 /*
index 0b86f7df7424799caa4a0204706313d0cc2bb23f..71ba616ec887d99fde1e96dc69a61446e07df8a0 100644 (file)
@@ -1194,7 +1194,7 @@ static void ap_register_log_handler(apr_pool_t *p, char *tag,
     apr_hash_set(log_hash, tag, 1, (const void *)log_struct);
 }
 
-static void log_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
+static int log_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
 {
     static APR_OPTIONAL_FN_TYPE(ap_register_log_handler) *log_pfn_register;
 
@@ -1229,6 +1229,8 @@ static void log_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
         log_pfn_register(p, "U", log_request_uri, 1);
         log_pfn_register(p, "s", log_status, 1);
     }
+
+    return OK;
 }
 
 static void register_hooks(apr_pool_t *p)
index 2d356780bd4fc873727b67823e728a2cbd83baea..2e06ad52a6cb61f2d06634f30cc05b84276a95ae 100644 (file)
@@ -605,12 +605,14 @@ static void register_format_tag_handler(apr_pool_t *p, char *tag, void *tag_hand
     h = tag_handler;
     apr_hash_set(format_tag_hash, tag, 1, h);
 }
-static void header_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
+static int header_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
 {
     format_tag_hash = apr_hash_make(p);
     register_format_tag_handler(p, "D", (void*) header_request_duration, 0);
     register_format_tag_handler(p, "t", (void*) header_request_time, 0);
     register_format_tag_handler(p, "e", (void*) header_request_env_var, 0);
+
+    return OK;
 }
 
 static void register_hooks(apr_pool_t *p)
index 71a81e26e70c7e90dc5ac350f4b50c8d292f5ee4..4a7082469dc2b013b110fb9f3a506e60861a2f6e 100644 (file)
@@ -204,7 +204,7 @@ static const command_rec ssl_config_cmds[] = {
  *  the various processing hooks
  */
 
-static void ssl_hook_pre_config(
+static int ssl_hook_pre_config(
     apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
 {
     /* Register us to handle mod_log_config %c/%x variables */
@@ -215,6 +215,8 @@ static void ssl_hook_pre_config(
     /* XXX: Register us to handle mod_status extensions that don't exist yet */
     ssl_scache_status_register(pconf);
 #endif /* -0- */
+
+    return OK;
 }
 
 static int ssl_hook_pre_connection(conn_rec *c)
index 5b61ad3c9b860ac6085f7453b51a71771d1e9688..d198aa51f5cc4cb953f3d877c59873c1cca4e49d 100644 (file)
@@ -118,9 +118,9 @@ APR_HOOK_STRUCT(
 
 AP_IMPLEMENT_HOOK_RUN_ALL(int,header_parser,
                           (request_rec *r),(r),OK,DECLINED)
-AP_IMPLEMENT_HOOK_VOID(pre_config,
+AP_IMPLEMENT_HOOK_RUN_ALL(int,pre_config,
                       (apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp),
-                       (pconf,plog,ptemp))
+                       (pconf,plog,ptemp),OK,DECLINED)
 AP_IMPLEMENT_HOOK_RUN_ALL(int,post_config,
                       (apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp,
                         server_rec *s),(pconf,plog,ptemp,s),OK,DECLINED)
index f9586752261f3abc63e7e4193b3d56c1b1ccec21..763584e59c7fd3e81480f03dd81446cf8d62e221 100644 (file)
@@ -433,7 +433,10 @@ int main(int argc, const char * const argv[])
 
     ap_server_root = def_server_root;
     server_conf = ap_read_config(process, ptemp, confname, &ap_conftree);
-    ap_run_pre_config(pconf, plog, ptemp);
+    if (ap_run_pre_config(pconf, plog, ptemp) != OK) {
+        ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR| APLOG_NOERRNO, 0, NULL, "Pre-configuration failed\n");
+        destroy_and_exit_process(process, 1);
+    }
     ap_process_config_tree(server_conf, ap_conftree, process->pconf, ptemp); 
     ap_fixup_virtual_hosts(pconf, server_conf);
     ap_fini_vhost_config(pconf, server_conf);
@@ -469,7 +472,10 @@ int main(int argc, const char * const argv[])
        apr_pool_create(&ptemp, pconf);
        ap_server_root = def_server_root;
         server_conf = ap_read_config(process, ptemp, confname, &ap_conftree);
-       ap_run_pre_config(pconf, plog, ptemp);
+        if (ap_run_pre_config(pconf, plog, ptemp) != OK) {
+            ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR| APLOG_NOERRNO, 0, NULL, "Pre-configuration failed\n");
+            destroy_and_exit_process(process, 1);
+        }
         ap_process_config_tree(server_conf, ap_conftree, process->pconf, ptemp);
         ap_fixup_virtual_hosts(pconf, server_conf);
         ap_fini_vhost_config(pconf, server_conf);
index 97fd7afa72f67ff425b5a3957b445e35395b5470..2f059eae21ab8bd0cca1be86597f68d510cf8fc4 100644 (file)
@@ -992,7 +992,7 @@ int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
     return 0;
 }
 
-static void beos_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
+static int beos_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
 {
     static int restart_num = 0;
     int no_detach, debug;
@@ -1028,6 +1028,8 @@ static void beos_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *pte
     ap_scoreboard_fname = DEFAULT_SCOREBOARD;
 
     apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
+
+    return OK;
 }
 
 static void beos_hooks(apr_pool_t *p)
index ff91d30d1ae10d558c83cbf0b394d737860883f9..5bf52b946522ac3a6d051067f5f65475a9e2c538 100644 (file)
@@ -1424,7 +1424,7 @@ int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
     return 0;
 }
 
-static void perchild_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
+static int perchild_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
 {
     static int restart_num = 0;
     int no_detach, debug;
@@ -1497,6 +1497,8 @@ static void perchild_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *pte
         child_info_table[i].gid = -1;
         child_info_table[i].sd = -1;
     }
+
+    return OK;
 }
 
 static int pass_request(request_rec *r)
index 7cd31b5c0eaf3f4c05800fffcb0e5dff0d121985..61d75aafc51ea8775b0c20fccc2187efd152afce 100644 (file)
@@ -494,7 +494,7 @@ int ap_graceful_stop_signalled(void)
 
 /* Configuration handling stuff */
 
-static void mpmt_os2_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
+static int mpmt_os2_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
 {
     one_process = ap_exists_config_define("ONE_PROCESS") || 
                   ap_exists_config_define("DEBUG");
@@ -507,6 +507,8 @@ static void mpmt_os2_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t
     ap_extended_status = 0;
     ap_min_spare_threads = DEFAULT_MIN_SPARE_THREAD;
     ap_max_spare_threads = DEFAULT_MAX_SPARE_THREAD;
+
+    return OK;
 }
 
 
index dbe0a98bc0c45c2a72ae0568d2a37bfba986a4ec..80febdb0d325cce8b03794e6c0072185f6b347b1 100644 (file)
@@ -953,7 +953,7 @@ int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
     return 0;
 }
 
-static void netware_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
+static int netware_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
 {
     int debug;
 
@@ -970,6 +970,8 @@ static void netware_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptem
     ap_scoreboard_fname = DEFAULT_SCOREBOARD;
     ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
     ap_extended_status = 0;
+
+    return OK;
 }
 
 static void netware_mpm_hooks(apr_pool_t *p)
index ff91d30d1ae10d558c83cbf0b394d737860883f9..5bf52b946522ac3a6d051067f5f65475a9e2c538 100644 (file)
@@ -1424,7 +1424,7 @@ int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
     return 0;
 }
 
-static void perchild_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
+static int perchild_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
 {
     static int restart_num = 0;
     int no_detach, debug;
@@ -1497,6 +1497,8 @@ static void perchild_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *pte
         child_info_table[i].gid = -1;
         child_info_table[i].sd = -1;
     }
+
+    return OK;
 }
 
 static int pass_request(request_rec *r)
index 5d48e73ee5018db71a73aa31695c074b8b3ef56a..42e1fd9c0c37de99a790cf285f2f1114c2502523 100644 (file)
@@ -1200,7 +1200,7 @@ int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
     return 0;
 }
 
-static void prefork_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
+static int prefork_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
 {
     static int restart_num = 0;
     int no_detach, debug;
@@ -1239,6 +1239,8 @@ static void prefork_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptem
     ap_extended_status = 0;
 
     apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
+
+    return OK;
 }
 
 static void prefork_hooks(apr_pool_t *p)
index fb3236ba8e33e071adb77afd456bca8c9cf901ac..b3488a1dee7609600c0776249f808550126addc7 100644 (file)
@@ -1933,7 +1933,7 @@ void winnt_rewrite_args(process_rec *process)
 }
 
 
-static void winnt_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp) 
+static int winnt_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp) 
 {
     /* Handle the following SCM aspects in this phase:
      *
@@ -1955,6 +1955,7 @@ static void winnt_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *pt
         ap_log_error(APLOG_MARK,APLOG_CRIT, service_to_start_success, NULL, 
                      "%s: Unable to start the service manager.",
                      service_name);
+        /* XXX: return HTTP_INTERNAL_SERVER_ERROR? */
         exit(1);
     }
 
@@ -1974,6 +1975,8 @@ static void winnt_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *pt
     ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
 
     apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
+
+    return OK;
 }
 
 static int winnt_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec* server)
index 07bdf803a047297fcc427c913172032f40d4a4e3..1b23c65048e2e0c4e34c2a6b8558d2eea2732ce8 100644 (file)
@@ -1540,7 +1540,7 @@ int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
     return 0;
 }
 
-static void worker_pre_config(apr_pool_t *pconf, apr_pool_t *plog, 
+static int worker_pre_config(apr_pool_t *pconf, apr_pool_t *plog, 
                               apr_pool_t *ptemp)
 {
     static int restart_num = 0;
@@ -1618,6 +1618,8 @@ static void worker_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
     ap_extended_status = 0;
 
     apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
+
+    return OK;
 }
 
 static void worker_hooks(apr_pool_t *p)