You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by hg...@apache.org on 2001/09/14 19:47:58 UTC
cvs commit: jakarta-tomcat/src/native/mod_jk/common jk_global.h jk_service.h
hgomez 01/09/14 10:47:58
Modified: src/native/mod_jk/apache1.3 mod_jk.c
src/native/mod_jk/common jk_global.h jk_service.h
Log:
Add JkOptions Directive.
You could use now +ForwardUnparsedUri to send URI as unparsed
to follow spec or -ForwardUnparsedUri to send URI normaly
and be compatible with mod_rewrite
New options also, +ForwardKeySize to send via ajp13 the
SSL KEY SIZE which is required by Servlet 2.3 spec but
not with 2.2
Just need some code in jk_ajp13_worker.c
Revision Changes Path
1.16 +125 -20 jakarta-tomcat/src/native/mod_jk/apache1.3/mod_jk.c
Index: mod_jk.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/native/mod_jk/apache1.3/mod_jk.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- mod_jk.c 2001/09/10 15:07:12 1.15
+++ mod_jk.c 2001/09/14 17:47:58 1.16
@@ -124,9 +124,15 @@
char *https_indicator;
char *certs_indicator;
char *cipher_indicator;
- char *sesion_indicator;
+ char *session_indicator;
+ char *key_size_indicator;
/*
+ * Jk Options
+ */
+ int options;
+
+ /*
* Environment variables support
*/
int envvars_in_use;
@@ -433,11 +439,35 @@
s->query_string = r->args;
s->req_uri = r->uri;
+ 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]
+ *
+ * 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;
s->ssl_cert_len = 0;
s->ssl_cipher = NULL;
s->ssl_session = NULL;
+ s->ssl_key_size = -1; /* required by Servlet 2.3 Api, added in jtc */
if(conf->ssl_enable || conf->envvars_in_use) {
ap_add_common_vars(r);
@@ -452,10 +482,16 @@
if(s->ssl_cert) {
s->ssl_cert_len = strlen(s->ssl_cert);
}
- s->ssl_cipher = (char *)ap_table_get(r->subprocess_env,
- conf->cipher_indicator);
- s->ssl_session = (char *)ap_table_get(r->subprocess_env,
- conf->sesion_indicator);
+
+ /* Servlet 2.3 API */
+ s->ssl_cipher = (char *)ap_table_get(r->subprocess_env, conf->cipher_indicator);
+ s->ssl_session = (char *)ap_table_get(r->subprocess_env, conf->session_indicator);
+
+ /* Servlet 2.3 API */
+ ssl_temp = (char *)ap_table_get(r->subprocess_env, conf->key_size_indicator);
+ if (ssl_temp)
+ s->ssl_key_size = atoi(ssl_temp);
+
}
}
@@ -555,7 +591,6 @@
/* Set up our value */
conf->mountcopy = flag ? JK_TRUE : JK_FALSE;
-
return NULL;
}
@@ -634,7 +669,6 @@
/* Set up our value */
conf->ssl_enable = flag ? JK_TRUE : JK_FALSE;
-
return NULL;
}
@@ -645,9 +679,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->https_indicator = indicator;
+ conf->https_indicator = ap_pstrdup(cmd->pool,indicator);
return NULL;
}
@@ -659,8 +692,7 @@
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;
}
@@ -671,12 +703,17 @@
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;
}
+/*
+ * JkSESSIONIndicator Directive Handling
+ *
+ * JkSESSIONIndicator SSL_SESSION_ID
+ */
+
static const char *jk_set_session_indicator(cmd_parms *cmd,
void *dummy,
char *indicator)
@@ -684,13 +721,23 @@
server_rec *s = cmd->server;
jk_server_conf_t *conf =
(jk_server_conf_t *)ap_get_module_config(s->module_config, &jk_module);
-
- conf->sesion_indicator = indicator;
+ conf->session_indicator = ap_pstrdup(cmd->pool,indicator);
return NULL;
}
+static const char *jk_set_key_size_indicator(cmd_parms *cmd,
+ void *dummy,
+ char *indicator)
+{
+ 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;
+}
+
static const char *jk_set_log_level(cmd_parms *cmd,
void *dummy,
char *log_level)
@@ -700,11 +747,50 @@
(jk_server_conf_t *)ap_get_module_config(s->module_config, &jk_module);
conf->log_level = jk_parse_log_level(log_level);
-
return NULL;
}
+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;
+
+ 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;
+}
+
static const char *jk_add_env_var(cmd_parms *cmd,
void *dummy,
char *env_name,
@@ -782,10 +868,21 @@
"Name of the Apache environment that contains SSL client cipher"},
{"JkSESSIONIndicator", jk_set_session_indicator, NULL, RSRC_CONF, TAKE1,
"Name of the Apache environment that contains SSL session"},
+ {"JkKEYSIZEIndicator", jk_set_key_size_indicator, NULL, RSRC_CONF, TAKE1,
+ "Name of the Apache environment that contains SSL key size in use"},
{"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", jk_add_env_var, NULL, RSRC_CONF, TAKE2,
"Adds a name of environment variable that should be sent to Tomcat"},
{NULL}
@@ -889,6 +986,11 @@
c->mountcopy = JK_FALSE;
/*
+ * No options by default
+ */
+ c->options = 0;
+
+ /*
* By default we will try to gather SSL info.
* Disable this functionality through JkExtractSSL
*/
@@ -906,7 +1008,8 @@
* configuration directives to set them.
*
c->cipher_indicator = "HTTPS_CIPHER";
- c->sesion_indicator = NULL;
+ c->session_indicator = NULL;
+ c->key_size_indicator = NULL;
*/
/*
@@ -914,7 +1017,8 @@
* are using another module (say apache_ssl) comment them out.
*/
c->cipher_indicator = "SSL_CIPHER";
- c->sesion_indicator = "SSL_SESSION_ID";
+ c->session_indicator = "SSL_SESSION_ID";
+ c->key_size_indicator = "SSL_CIPHER_USEKEYSIZE";
if(!map_alloc(&(c->uri_to_context))) {
jk_error_exit(APLOG_MARK, APLOG_EMERG, s, p, "Memory error");
@@ -943,7 +1047,8 @@
overrides->https_indicator = base->https_indicator;
overrides->certs_indicator = base->certs_indicator;
overrides->cipher_indicator = base->cipher_indicator;
- overrides->sesion_indicator = base->sesion_indicator;
+ overrides->session_indicator = base->session_indicator;
+ overrides->key_size_indicator = base->key_size_indicator;
}
if(overrides->mountcopy) {
1.4 +9 -1 jakarta-tomcat/src/native/mod_jk/common/jk_global.h
Index: jk_global.h
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/native/mod_jk/common/jk_global.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- jk_global.h 2001/03/12 21:09:26 1.3
+++ jk_global.h 2001/09/14 17:47:58 1.4
@@ -57,7 +57,7 @@
* Description: Global definitions and include files that should exist *
* anywhere *
* Author: Gal Shachor <sh...@il.ibm.com> *
- * Version: $Revision: 1.3 $ *
+ * Version: $Revision: 1.4 $ *
***************************************************************************/
#ifndef JK_GLOBAL_H
@@ -143,6 +143,14 @@
#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
}
1.6 +8 -1 jakarta-tomcat/src/native/mod_jk/common/jk_service.h
Index: jk_service.h
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/native/mod_jk/common/jk_service.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- jk_service.h 2001/09/01 01:53:25 1.5
+++ jk_service.h 2001/09/14 17:47:58 1.6
@@ -59,7 +59,7 @@
* JVM connection point *
* Author: Gal Shachor <sh...@il.ibm.com> *
* Dan Milstein <da...@shore.net>
- * Version: $Revision: 1.5 $ *
+ * Version: $Revision: 1.6 $ *
***************************************************************************/
#ifndef JK_SERVICE_H
@@ -164,6 +164,13 @@
unsigned ssl_cert_len;
char *ssl_cipher;
char *ssl_session;
+
+ /*
+ * SSL extra information for Servlet 2.3 API
+ *
+ * ssl_key_size - ssl key size in use
+ */
+ int ssl_key_size;
/*
* Headers, names and values.