hgomez 01/09/14 10:45:15
Modified: jk/native/apache-1.3 mod_jk.c
jk/native/common jk_global.h
Log:
Add JkSetOptions
Revision Changes Path
1.15 +111 -40 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.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- mod_jk.c 2001/09/10 18:32:36 1.14
+++ mod_jk.c 2001/09/14 17:45:14 1.15
@@ -61,7 +61,7 @@
* Author: Gal Shachor <[EMAIL PROTECTED]> *
* Dan Milstein <[EMAIL PROTECTED]> *
* Henri Gomez <[EMAIL PROTECTED]> *
- * Version: $Revision: 1.14 $ *
+ * Version: $Revision: 1.15 $ *
***************************************************************************/
/*
@@ -142,6 +142,11 @@
char *key_size_indicator;
/*
+ * Jk Options
+ */
+ int options;
+
+ /*
* Environment variables support
*/
int envvars_in_use;
@@ -280,12 +285,12 @@
}
}
- if(p->read_body_started) {
- long rv;
- if ((rv = ap_get_client_block(p->r, b, len)) < 0) {
- *actually_read = 0;
+ if(p->read_body_started) {
+ long rv;
+ if ((rv = ap_get_client_block(p->r, b, len)) < 0) {
+ *actually_read = 0;
} else {
- *actually_read = (unsigned) rv;
+ *actually_read = (unsigned) rv;
}
return JK_TRUE;
}
@@ -460,23 +465,33 @@
s->server_software = (char *)ap_get_server_version();
s->method = (char *)r->method;
- s->content_length = get_content_length(r);
- s->is_chunked = r->read_chunked;
+ s->content_length = get_content_length(r);
+ s->is_chunked = r->read_chunked;
s->no_more_chunks = 0;
s->query_string = r->args;
- /*
+ if (conf->options & JK_OPT_FWDUNPARSED) {
+ /*
* The 2.2 servlet spec errata says the uri from
* HttpServletRequest.getRequestURI() should remain encoded.
* [http://java.sun.com/products/servlet/errata_042700.html]
- */
- s->req_uri = r->unparsed_uri;
- if (s->req_uri != NULL) {
- char *query_str = strchr(s->req_uri, '?');
- if (query_str != NULL) {
- *query_str = 0;
- }
- }
+ *
+ * we follow spec in that case but can't use mod_rewrite
+ */
+ s->req_uri = r->unparsed_uri;
+ if (s->req_uri != NULL) {
+ char *query_str = strchr(s->req_uri, '?');
+ if (query_str != NULL) {
+ *query_str = 0;
+ }
+ }
+ }
+ else {
+ /*
+ * we don't follow spec but we can use mod_rewrite
+ */
+ s->req_uri = r->uri;
+ }
s->is_ssl = JK_FALSE;
s->ssl_cert = NULL;
@@ -738,7 +753,6 @@
/* Set up our value */
conf->ssl_enable = flag ? JK_TRUE : JK_FALSE;
-
return NULL;
}
@@ -756,8 +770,7 @@
jk_server_conf_t *conf =
(jk_server_conf_t *)ap_get_module_config(s->module_config, &jk_module);
- conf->https_indicator = indicator;
-
+ conf->https_indicator = ap_pstrdup(cmd->pool,indicator);
return NULL;
}
@@ -774,9 +787,8 @@
server_rec *s = cmd->server;
jk_server_conf_t *conf =
(jk_server_conf_t *)ap_get_module_config(s->module_config, &jk_module);
-
- conf->certs_indicator = indicator;
+ conf->certs_indicator = ap_pstrdup(cmd->pool,indicator);
return NULL;
}
@@ -793,9 +805,8 @@
server_rec *s = cmd->server;
jk_server_conf_t *conf =
(jk_server_conf_t *)ap_get_module_config(s->module_config, &jk_module);
-
- conf->cipher_indicator = indicator;
+ conf->cipher_indicator = ap_pstrdup(cmd->pool,indicator);
return NULL;
}
@@ -813,8 +824,7 @@
jk_server_conf_t *conf =
(jk_server_conf_t *)ap_get_module_config(s->module_config, &jk_module);
- conf->session_indicator = indicator;
-
+ conf->session_indicator = ap_pstrdup(cmd->pool,indicator);
return NULL;
}
@@ -831,9 +841,58 @@
server_rec *s = cmd->server;
jk_server_conf_t *conf =
(jk_server_conf_t *)ap_get_module_config(s->module_config, &jk_module);
+
+ conf->key_size_indicator = ap_pstrdup(cmd->pool,indicator);
+ return NULL;
+}
+
+/*
+ * JkOptions Directive Handling
+ *
+ *
+ * +ForwardUnparsed => Forward URI as unparsed, spec compliant but broke
mod_rewrite
+ * -ForwardUnparsed => Forward URI normally, less spec compliant but mod_rewrite
compatible
+ * +ForwardSSLKeySize => Forward SSL Key Size, to follow 2.3 specs but may broke
old TC 3.2
+ * -ForwardSSLKeySize => Don't Forward SSL Key Size, will make mod_jk works with
all TC release
+ */
+
+const char *jk_set_options(cmd_parms *cmd,
+ void *dummy,
+ const char *line)
+{
+ int opt = 0;
+ char action;
+ char *w;
+
+ server_rec *s = cmd->server;
+ jk_server_conf_t *conf =
+ (jk_server_conf_t *)ap_get_module_config(s->module_config, &jk_module);
+
+ while (line[0] != 0) {
+ w = ap_getword_conf(cmd->pool, &line);
+ action = 0;
- conf->key_size_indicator = indicator;
+ if (*w == '+' || *w == '-') {
+ action = *(w++);
+ }
+ if (!strcasecmp(w, "ForwardUnparsedUri"))
+ opt = JK_OPT_FWDUNPARSED;
+ else if (!strcasecmp(w, "ForwardKeySize"))
+ opt = JK_OPT_FWDKEYSIZE;
+ else
+ return ap_pstrcat(cmd->pool, "JkOptions: Illegal option '", w, "'",
NULL);
+
+ if (action == '-') {
+ conf->options &= ~opt;
+ }
+ else if (action == '+') {
+ conf->options |= opt;
+ }
+ else { /* for now +Opt == Opt */
+ conf->options |= opt;
+ }
+ }
return NULL;
}
@@ -929,6 +988,17 @@
{"JkExtractSSL", jk_set_enable_ssl, NULL, RSRC_CONF, FLAG,
"Turns on SSL processing and information gathering by mod_jk"},
+ /*
+ * Options to tune mod_jk configuration
+ * for now we understand :
+ * +ForwardUnparsed => Forward URI as unparsed, spec compliant but broke
mod_rewrite
+ * -ForwardUnparsed => Forward URI normally, less spec compliant but
mod_rewrite compatible
+ * +ForwardSSLKeySize => Forward SSL Key Size, to follow 2.3 specs but may
broke old TC 3.2
+ * -ForwardSSLKeySize => Don't Forward SSL Key Size, will make mod_jk works
with all TC release
+ */
+ {"JkOptions", jk_set_options, NULL, RSRC_CONF, RAW_ARGS,
+ "Set one of more options to configure the mod_jk module"},
+
/*
* JkEnvVar let user defines envs var passed from WebServer to
* Servlet Engine
@@ -950,17 +1020,17 @@
{
/* Retrieve the worker name stored by jk_translate() */
const char *worker_name = ap_table_get(r->notes, JK_WORKER_ID);
- int rc;
+ int rc;
if(r->proxyreq) {
return HTTP_INTERNAL_SERVER_ERROR;
- }
-
+ }
+
- /* Set up r->read_chunked flags for chunked encoding, if present */
- if(rc = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)) {
- return rc;
- }
+ /* Set up r->read_chunked flags for chunked encoding, if present */
+ if(rc = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)) {
+ return rc;
+ }
if(worker_name) {
jk_server_conf_t *conf =
@@ -990,7 +1060,7 @@
int is_recoverable_error = JK_FALSE;
rc = end->service(end, &s, l, &is_recoverable_error);
- if (s.content_read < s.content_length ||
+ if (s.content_read < s.content_length ||
(s.is_chunked && ! s.no_more_chunks)) {
/*
* If the servlet engine didn't consume all of the
@@ -1103,11 +1173,12 @@
jk_server_conf_t *overrides = (jk_server_conf_t *)overridesv;
if(base->ssl_enable) {
- overrides->ssl_enable = base->ssl_enable;
- overrides->https_indicator = base->https_indicator;
- overrides->certs_indicator = base->certs_indicator;
- overrides->cipher_indicator = base->cipher_indicator;
- overrides->session_indicator = base->session_indicator;
+ overrides->ssl_enable = base->ssl_enable;
+ overrides->https_indicator = base->https_indicator;
+ overrides->certs_indicator = base->certs_indicator;
+ overrides->cipher_indicator = base->cipher_indicator;
+ overrides->session_indicator = base->session_indicator;
+ overrides->key_size_indicator = base->key_size_indicator;
}
if(overrides->mountcopy) {
1.6 +8 -1 jakarta-tomcat-connectors/jk/native/common/jk_global.h
Index: jk_global.h
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_global.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- jk_global.h 2001/06/22 16:22:01 1.5
+++ jk_global.h 2001/09/14 17:45:15 1.6
@@ -59,7 +59,7 @@
* Description: Global definitions and include files that should exist *
* anywhere *
* Author: Gal Shachor <[EMAIL PROTECTED]> *
- * Version: $Revision: 1.5 $ *
+ * Version: $Revision: 1.6 $ *
***************************************************************************/
#ifndef JK_GLOBAL_H
@@ -147,6 +147,13 @@
#define FILE_SEPERATOR ('/')
#define PATH_ENV_VARIABLE ("LD_LIBRARY_PATH")
#endif
+
+/*
+ * JK options
+ */
+
+#define JK_OPT_FWDUNPARSED 0x0001
+#define JK_OPT_FWDKEYSIZE 0x0002
#ifdef __cplusplus
}