mturk 2005/02/21 00:29:17
Modified: jk/native/apache-1.3 mod_jk.c
jk/native/apache-2.0 mod_jk.c
Log:
Add JkMountFile directive. This enables to dynamically add or remove
uri mappings without restarting apache. To disable uri mapping add a
minus '-' sign in front of mapping.
Revision Changes Path
1.71 +52 -3 jakarta-tomcat-connectors/jk/native/apache-1.3/mod_jk.c
Index: mod_jk.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/apache-1.3/mod_jk.c,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -r1.70 -r1.71
--- mod_jk.c 17 Feb 2005 15:03:15 -0000 1.70
+++ mod_jk.c 21 Feb 2005 08:29:17 -0000 1.71
@@ -95,6 +95,7 @@
*/
jk_map_t *worker_properties;
char *worker_file;
+ char *mount_file;
jk_map_t *uri_to_context;
int mountcopy;
@@ -798,6 +799,38 @@
}
/*
+ * JkMountFile Directive Handling
+ *
+ * JkMountFile file
+ */
+
+static const char *jk_set_mount_file(cmd_parms * cmd,
+ void *dummy, char *mount_file)
+{
+ server_rec *s = cmd->server;
+ struct stat statbuf;
+
+ jk_server_conf_t *conf =
+ (jk_server_conf_t *) ap_get_module_config(s->module_config,
+ &jk_module);
+
+ /* we need an absolut path (ap_server_root_relative does the ap_pstrdup)
*/
+ conf->mount_file = ap_server_root_relative(cmd->pool, mount_file);
+
+#ifdef CHROOTED_APACHE
+ ap_server_strip_chroot(conf->mount_file, 0);
+#endif
+
+ if (conf->mount_file == NULL)
+ return "JkMountFile file name invalid";
+
+ if (stat(conf->mount_file, &statbuf) == -1)
+ return "Can't find the mount file specified";
+
+ return NULL;
+}
+
+/*
* JkLogFile Directive Handling
*
* JkLogFile file
@@ -1519,6 +1552,16 @@
"the name of a worker file for the Jakarta servlet containers"},
/*
+ * JkMountFile specifies a full path to the location of the
+ * uriworker properties file.
+ *
+ * This file defines the different mapping for workers used by apache
+ * to redirect servlet requests.
+ */
+ {"JkMountFile", jk_set_mount_file, NULL, RSRC_CONF, TAKE1,
+ "the name of a mount file for the Jakarta servlet uri mappings"},
+
+ /*
* JkAutoMount specifies that the list of handled URLs must be
* asked to the servlet engine (autoconf feature)
*/
@@ -1788,6 +1831,7 @@
c->worker_properties = NULL;
jk_map_alloc(&c->worker_properties);
c->worker_file = NULL;
+ c->mount_file = NULL;
c->log_file = NULL;
c->log_level = -1;
c->log = NULL;
@@ -1883,6 +1927,7 @@
copy_jk_map(p, overrides->s, base->uri_to_context,
overrides->uri_to_context);
copy_jk_map(p, overrides->s, base->automount, overrides->automount);
+ overrides->mount_file = base->mount_file;
}
if (base->envvars_in_use) {
@@ -1964,7 +2009,7 @@
/*if(map_alloc(&init_map)) { */
- if (!jk_map_read_properties(init_map, conf->worker_file)) {
+ if (!jk_map_read_properties(init_map, conf->worker_file, NULL)) {
if (jk_map_size(init_map) == 0) {
ap_log_error(APLOG_MARK, APLOG_ERR, NULL,
@@ -1984,7 +2029,11 @@
worker_env.virtual = "*"; /* for now */
worker_env.server_name = (char *)ap_get_server_version();
if (wc_open(init_map, &worker_env, conf->log)) {
- /* we don't need this any more so free it */
+ /* XXX: For each virtual host? */
+ if (conf && conf->mount_file) {
+ conf->uw_map->fname = conf->mount_file;
+ uri_worker_map_load(conf->uw_map, conf->log);
+ }
return;
}
1.128 +56 -7 jakarta-tomcat-connectors/jk/native/apache-2.0/mod_jk.c
Index: mod_jk.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/apache-2.0/mod_jk.c,v
retrieving revision 1.127
retrieving revision 1.128
diff -u -r1.127 -r1.128
--- mod_jk.c 17 Feb 2005 15:03:15 -0000 1.127
+++ mod_jk.c 21 Feb 2005 08:29:17 -0000 1.128
@@ -130,6 +130,7 @@
*/
jk_map_t *worker_properties;
char *worker_file;
+ char *mount_file;
jk_map_t *uri_to_context;
int mountcopy;
@@ -844,6 +845,34 @@
}
/*
+ * JkMountFile Directive Handling
+ *
+ * JkMountFile file
+ */
+
+static const char *jk_set_mount_file(cmd_parms * cmd,
+ void *dummy, const char *mount_file)
+{
+ server_rec *s = cmd->server;
+ struct stat statbuf;
+
+ jk_server_conf_t *conf =
+ (jk_server_conf_t *) ap_get_module_config(s->module_config,
+ &jk_module);
+
+ /* we need an absolut path (ap_server_root_relative does the ap_pstrdup)
*/
+ conf->mount_file = ap_server_root_relative(cmd->pool, mount_file);
+
+ if (conf->mount_file == NULL)
+ return "JkMountFile file name invalid";
+
+ if (stat(conf->mount_file, &statbuf) == -1)
+ return "Can't find the mount file specified";
+
+ return NULL;
+}
+
+/*
* JkLogFile Directive Handling
*
* JkLogFile file
@@ -1563,6 +1592,16 @@
"the name of a worker file for the Jakarta servlet
containers"),
/*
+ * JkMountFile specifies a full path to the location of the
+ * uriworker properties file.
+ *
+ * This file defines the different mapping for workers used by apache
+ * to redirect servlet requests.
+ */
+ AP_INIT_TAKE1("JkMountFile", jk_set_mount_file, NULL, RSRC_CONF,
+ "the name of a mount file for the Jakarta servlet uri
mapping"),
+
+ /*
* JkAutoMount specifies that the list of handled URLs must be
* asked to the servlet engine (autoconf feature)
*/
@@ -1997,6 +2036,7 @@
c->worker_properties = NULL;
jk_map_alloc(&c->worker_properties);
c->worker_file = NULL;
+ c->mount_file = NULL;
c->log_file = NULL;
c->log_level = -1;
c->log = NULL;
@@ -2097,6 +2137,7 @@
copy_jk_map(p, overrides->s, base->uri_to_context,
overrides->uri_to_context);
copy_jk_map(p, overrides->s, base->automount, overrides->automount);
+ overrides->mount_file = base->mount_file;
}
if (base->envvars_in_use) {
@@ -2324,7 +2365,7 @@
}
/* if(map_alloc(&init_map)) { */
- if (!jk_map_read_properties(init_map, conf->worker_file)) {
+ if (!jk_map_read_properties(init_map, conf->worker_file, NULL)) {
if (jk_map_size(init_map) == 0) {
ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO,
APLOG_EMERG, NULL,
@@ -2339,7 +2380,7 @@
worker_env.uri_to_worker = conf->uw_map;
worker_env.virtual = "*"; /* for now */
worker_env.server_name = (char *)ap_get_server_version();
- if (wc_open(init_map, &worker_env, conf->log)) {
+ if (wc_open(init_map, &worker_env, conf->log)) {
ap_add_version_component(pconf, JK_EXPOSED_VERSION);
}
}
@@ -2349,6 +2390,8 @@
apr_pool_t * ptemp, server_rec * s)
{
apr_status_t rv;
+ jk_server_conf_t *conf;
+ server_rec *srv = s;
/* create the jk log lockfiles in the parent */
if ((rv = apr_global_mutex_create(&jk_log_lock, NULL,
@@ -2370,11 +2413,9 @@
#endif
if (!s->is_virtual) {
- jk_server_conf_t *conf =
- (jk_server_conf_t *) ap_get_module_config(s->module_config,
- &jk_module);
+ conf = (jk_server_conf_t *)ap_get_module_config(s->module_config,
+ &jk_module);
if (!conf->was_initialized) {
- server_rec *srv = s;
conf->was_initialized = JK_TRUE;
/* step through the servers and open each jk logfile.
*/
@@ -2385,6 +2426,14 @@
init_jk(pconf, conf, s);
}
}
+ for (srv = s; srv; srv = srv->next) {
+ conf = (jk_server_conf_t *)ap_get_module_config(srv->module_config,
+ &jk_module);
+ if (conf && conf->mount_file) {
+ conf->uw_map->fname = conf->mount_file;
+ uri_worker_map_load(conf->uw_map, conf->log);
+ }
+ }
return OK;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]