mturk 2005/04/21 03:36:58
Modified: jk/native/common jk_map.c jk_util.c jk_util.h
Log:
Add is_unique property check, so that multiple unique directives override
each other, instead making a list out of unique property values.
Increase the read buffer size to 8K, that should be enough for all cases.
Revision Changes Path
1.35 +13 -18 jakarta-tomcat-connectors/jk/native/common/jk_map.c
Index: jk_map.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_map.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- jk_map.c 13 Apr 2005 12:02:08 -0000 1.34
+++ jk_map.c 21 Apr 2005 10:36:58 -0000 1.35
@@ -32,7 +32,7 @@
#include "jk_shm.h"
#define CAPACITY_INC_SIZE (50)
-#define LENGTH_OF_LINE (1024)
+#define LENGTH_OF_LINE (8192)
#ifdef AS400
#define CASE_MASK 0xbfbfbfbf
@@ -233,7 +233,7 @@
sprintf(buf, "%f", def);
rc = jk_map_get_string(m, name, buf);
- return atof(rc);
+ return atof(rc);
}
int jk_map_get_bool(jk_map_t *m, const char *name, int def)
@@ -242,7 +242,7 @@
size_t len;
const char *rc;
int rv = 0;
-
+
sprintf(buf, "%d", def);
rc = jk_map_get_string(m, name, buf);
@@ -280,7 +280,7 @@
}
/*
- * GS, in addition to VG's patch, we now need to
+ * GS, in addition to VG's patch, we now need to
* strtok also by a "*"
*/
#if defined(AS400) || defined(_REENTRANT)
@@ -355,7 +355,7 @@
if (strlen(str) > LENGTH_OF_LINE)
return JK_FALSE;
-
+
strcpy(prp, str);
if (trim(prp)) {
char *v = strchr(prp, '=');
@@ -367,22 +367,17 @@
if (strlen(v) && strlen(prp)) {
const char *oldv = jk_map_get_string(m, prp, NULL);
v = jk_map_replace_properties(v, m);
- if (oldv) {
+ if (oldv && jk_is_unique_property(prp) == JK_FALSE) {
char *tmpv = jk_pool_alloc(&m->p,
- strlen(v) +
- strlen(oldv) + 3);
+ strlen(v) + strlen(oldv) + 3);
if (tmpv) {
char sep = '*';
- if (jk_is_path_poperty(prp)) {
+ if (jk_is_path_poperty(prp))
sep = PATH_SEPERATOR;
- }
- else if (jk_is_cmd_line_poperty(prp)) {
+ else if (jk_is_cmd_line_poperty(prp))
sep = ' ';
- }
- else if (!stricmp(prp, "worker.list")) {
+ else if (!stricmp(prp, "worker.list"))
sep = ',';
- }
-
sprintf(tmpv, "%s%c%s", oldv, sep, v);
}
v = tmpv;
@@ -485,7 +480,7 @@
static size_t trim(char *s)
{
size_t i;
-
+
/* check for empty strings */
if (!(i = strlen(s)))
return 0;
@@ -540,7 +535,7 @@
/**
* Replace $(property) in value.
- *
+ *
*/
char *jk_map_replace_properties(const char *value, jk_map_t *m)
{
1.62 +90 -51 jakarta-tomcat-connectors/jk/native/common/jk_util.c
Index: jk_util.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_util.c,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -r1.61 -r1.62
--- jk_util.c 22 Feb 2005 08:42:45 -0000 1.61
+++ jk_util.c 21 Apr 2005 10:36:58 -0000 1.62
@@ -42,7 +42,7 @@
#define LIBPATH_OF_WORKER ("ld_path")
#define CMD_LINE_OF_WORKER ("cmd_line")
#define NATIVE_LIB_OF_WORKER ("native_lib")
-#define PREFIX_OF_WORKER ("worker")
+#define PREFIX_OF_WORKER "worker"
#define HOST_OF_WORKER ("host")
#define PORT_OF_WORKER ("port")
#define TYPE_OF_WORKER ("type")
@@ -88,8 +88,8 @@
#define HUGE_BUFFER_SIZE (8*1024)
#define LOG_LINE_SIZE (1024)
-/*
- * define the log format, we're using by default the one from error.log
+/*
+ * define the log format, we're using by default the one from error.log
*
* [Mon Mar 26 19:44:48 2001] [jk_uri_worker_map.c (155)]: Into
jk_uri_worker_map_t::uri_worker_map_alloc
* log format used by apache in error.log
@@ -293,10 +293,10 @@
#endif
set_time_str(buf, HUGE_BUFFER_SIZE);
used = strlen(buf);
-
+
/* Log [pid:threadid] for debug and trace levels */
if (l->level < JK_LOG_INFO_LEVEL) {
-#ifdef USE_SPRINTF /* until we get a snprintf function */
+#ifdef USE_SPRINTF /* until we get a snprintf function */
used += sprintf(&buf[used], "[%04d:%04d] ", getpid(),
jk_gettid());
#else
@@ -310,7 +310,7 @@
if (line) {
strcat(buf, jk_level_werbs[level]);
used += 8;
-
+
if (funcname) {
strcat(buf, funcname);
strcat(buf, "::");
@@ -318,7 +318,7 @@
}
}
-#ifdef USE_SPRINTF /* until we get a snprintf function */
+#ifdef USE_SPRINTF /* until we get a snprintf function */
if (line)
used += sprintf(&buf[used], "%s (%d): ", f, line);
#else
@@ -354,7 +354,7 @@
return NULL;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, TYPE_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, TYPE_OF_WORKER);
return jk_map_get_string(m, buf, DEFAULT_WORKER_TYPE);
}
@@ -365,7 +365,7 @@
if (!m || !wname) {
return NULL;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, DOMAIN_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, DOMAIN_OF_WORKER);
return jk_map_get_string(m, buf, def);
}
@@ -375,7 +375,7 @@
if (!m || !wname) {
return NULL;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, REDIRECT_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, REDIRECT_OF_WORKER);
return jk_map_get_string(m, buf, def);
}
@@ -387,7 +387,7 @@
return NULL;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, SECRET_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, SECRET_OF_WORKER);
return jk_map_get_string(m, buf, NULL);
}
@@ -402,7 +402,7 @@
char buf[1024];
if (m && prop && wname && pname) {
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, pname);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, pname);
*prop = jk_map_get_string(m, buf, NULL);
if (*prop) {
return JK_TRUE;
@@ -418,7 +418,7 @@
if (m && prop && wname && pname) {
int i;
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, pname);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, pname);
i = jk_map_get_int(m, buf, -1);
if (-1 != i) {
*prop = i;
@@ -436,7 +436,7 @@
return NULL;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, HOST_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, HOST_OF_WORKER);
return jk_map_get_string(m, buf, def);
}
@@ -449,7 +449,7 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, PORT_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, PORT_OF_WORKER);
return jk_map_get_int(m, buf, def);
}
@@ -460,7 +460,7 @@
if (def_cache_size < 1) {
if (protocol == AJP14_PROTO)
def_cache_size = AJP14_DEF_CACHE_SZ;
- else
+ else
def_cache_size = AJP13_DEF_CACHE_SZ;
}
return def_cache_size;
@@ -479,7 +479,7 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, CACHE_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, CACHE_OF_WORKER);
return jk_map_get_int(m, buf, def);
}
@@ -492,7 +492,7 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
SOCKET_TIMEOUT_OF_WORKER);
return jk_map_get_int(m, buf, def);
@@ -506,7 +506,7 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
WORKER_RECOVER_TIME);
return jk_map_get_int(m, buf, def);
@@ -520,7 +520,7 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
SOCKET_BUFFER_OF_WORKER);
i = jk_map_get_int(m, buf, 0);
@@ -537,7 +537,7 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
SOCKET_KEEPALIVE_OF_WORKER);
return jk_map_get_bool(m, buf, def);
@@ -551,7 +551,7 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
CACHE_TIMEOUT_OF_WORKER);
return jk_map_get_int(m, buf, def);
@@ -565,7 +565,7 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
CONNECT_TIMEOUT_OF_WORKER);
return jk_map_get_int(m, buf, def);
@@ -579,7 +579,7 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
PREPOST_TIMEOUT_OF_WORKER);
return jk_map_get_int(m, buf, def);
@@ -593,7 +593,7 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
REPLY_TIMEOUT_OF_WORKER);
return jk_map_get_int(m, buf, def);
@@ -607,7 +607,7 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
RECYCLE_TIMEOUT_OF_WORKER);
return jk_map_get_int(m, buf, def);
@@ -621,14 +621,14 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
RETRIES_OF_WORKER);
rv = jk_map_get_int(m, buf, def);
if (rv < 1)
rv = 1;
- return rv;
+ return rv;
}
int jk_get_worker_recovery_opts(jk_map_t *m, const char *wname, int def)
@@ -639,7 +639,7 @@
return -1;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
RECOVERY_OPTS_OF_WORKER);
return jk_map_get_int(m, buf, def);
@@ -653,7 +653,7 @@
return NULL;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, SECRET_KEY_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, SECRET_KEY_OF_WORKER);
return jk_map_get_string(m, buf, NULL);
}
@@ -681,7 +681,7 @@
char buf[1024];
if (m && wname) {
int value;
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
IS_WORKER_DISABLED);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, IS_WORKER_DISABLED);
value = jk_map_get_bool(m, buf, 0);
if (!value)
rc = JK_FALSE;
@@ -702,7 +702,7 @@
return DEFAULT_LB_FACTOR;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, LOAD_FACTOR_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, LOAD_FACTOR_OF_WORKER);
return jk_map_get_int(m, buf, DEFAULT_LB_FACTOR);
}
@@ -713,7 +713,7 @@
char buf[1024];
if (m && wname) {
int value;
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, STICKY_SESSION);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, STICKY_SESSION);
value = jk_map_get_bool(m, buf, 1);
if (!value)
rc = JK_FALSE;
@@ -727,7 +727,7 @@
char buf[1024];
if (m && wname) {
int value;
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
STICKY_SESSION_FORCE);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, STICKY_SESSION_FORCE);
value = jk_map_get_bool(m, buf, 0);
if (value)
rc = JK_TRUE;
@@ -743,7 +743,7 @@
return DEFAULT_LB_FACTOR;
}
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, METHOD_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, METHOD_OF_WORKER);
v = jk_map_get_string(m, buf, NULL);
if (!v)
return JK_LB_BYREQUESTS;
@@ -764,7 +764,7 @@
if (m && list && num_of_wokers && lb_wname) {
char **ar = NULL;
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, lb_wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", lb_wname,
BALANCE_WORKERS);
ar = jk_map_get_string_list(m, buf, num_of_wokers, NULL);
if (ar) {
@@ -772,7 +772,7 @@
return JK_TRUE;
}
/* Try old balanced_workers directive */
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, lb_wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", lb_wname,
BALANCED_WORKERS);
ar = jk_map_get_string_list(m, buf, num_of_wokers, NULL);
if (ar) {
@@ -795,7 +795,7 @@
if (m && list && num_of_maps && wname) {
char **ar = NULL;
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
MOUNT_OF_WORKER);
ar = jk_map_get_string_list(m, buf, num_of_maps, NULL);
if (ar) {
@@ -815,7 +815,7 @@
if (m && mx && wname) {
int i;
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, MX_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, MX_OF_WORKER);
i = jk_map_get_int(m, buf, -1);
if (-1 != i) {
@@ -833,7 +833,7 @@
if (m && ms && wname) {
int i;
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, MS_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, MS_OF_WORKER);
i = jk_map_get_int(m, buf, -1);
if (-1 != i) {
@@ -850,7 +850,7 @@
char buf[1024];
if (m && cp && wname) {
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, CP_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, CP_OF_WORKER);
*cp = jk_map_get_string(m, buf, NULL);
if (*cp) {
@@ -867,7 +867,7 @@
const char *type;
if (m && bt && wname) {
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, BRIDGE_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, BRIDGE_OF_WORKER);
type = jk_map_get_string(m, buf, NULL);
@@ -895,7 +895,7 @@
char buf[1024];
if (m && vm_path && wname) {
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, JVM_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, JVM_OF_WORKER);
*vm_path = jk_map_get_string(m, buf, NULL);
if (*vm_path) {
@@ -912,7 +912,7 @@
char buf[1024];
if (m && cb_path && wname) {
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname,
NATIVE_LIB_OF_WORKER);
*cb_path = jk_map_get_string(m, buf, NULL);
@@ -929,7 +929,7 @@
char buf[1024];
if (m && cmd_line && wname) {
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
CMD_LINE_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, CMD_LINE_OF_WORKER);
*cmd_line = jk_map_get_string(m, buf, NULL);
if (*cmd_line) {
@@ -982,12 +982,51 @@
return jk_is_some_property(prp_name, CMD_LINE_OF_WORKER);
}
+static const char *unique_properties[] = {
+ HOST_OF_WORKER,
+ PORT_OF_WORKER,
+ TYPE_OF_WORKER,
+ CACHE_OF_WORKER,
+ CACHE_TIMEOUT_OF_WORKER,
+ RECOVERY_OPTS_OF_WORKER,
+ CONNECT_TIMEOUT_OF_WORKER,
+ PREPOST_TIMEOUT_OF_WORKER,
+ REPLY_TIMEOUT_OF_WORKER,
+ SOCKET_TIMEOUT_OF_WORKER,
+ SOCKET_BUFFER_OF_WORKER,
+ SOCKET_KEEPALIVE_OF_WORKER,
+ RECYCLE_TIMEOUT_OF_WORKER,
+ LOAD_FACTOR_OF_WORKER,
+ STICKY_SESSION,
+ STICKY_SESSION_FORCE,
+ DOMAIN_OF_WORKER,
+ REDIRECT_OF_WORKER,
+ MOUNT_OF_WORKER,
+ METHOD_OF_WORKER,
+ IS_WORKER_DISABLED,
+ WORKER_RECOVER_TIME,
+ SECRET_KEY_OF_WORKER,
+ RETRIES_OF_WORKER,
+ NULL
+};
+
+int jk_is_unique_property(const char *prp_name)
+{
+ const char **props = &unique_properties[0];
+ while (*props) {
+ if (jk_is_some_property(prp_name, *props))
+ return JK_TRUE;
+ props++;
+ }
+ return JK_FALSE;
+}
+
int jk_get_worker_stdout(jk_map_t *m, const char *wname, const char
**stdout_name)
{
char buf[1024];
if (m && stdout_name && wname) {
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, STDOUT_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, STDOUT_OF_WORKER);
*stdout_name = jk_map_get_string(m, buf, NULL);
if (*stdout_name) {
@@ -1003,7 +1042,7 @@
char buf[1024];
if (m && stderr_name && wname) {
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, STDERR_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, STDERR_OF_WORKER);
*stderr_name = jk_map_get_string(m, buf, NULL);
if (*stderr_name) {
@@ -1019,7 +1058,7 @@
char buf[1024];
if (m && sysprops && wname) {
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname,
SYSPROPS_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, SYSPROPS_OF_WORKER);
*sysprops = jk_map_get_string(m, buf, NULL);
if (*sysprops) {
@@ -1035,7 +1074,7 @@
char buf[1024];
if (m && libpath && wname) {
- sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, LIBPATH_OF_WORKER);
+ sprintf(buf, PREFIX_OF_WORKER ".%s.%s", wname, LIBPATH_OF_WORKER);
*libpath = jk_map_get_string(m, buf, NULL);
if (*libpath) {
@@ -1157,7 +1196,7 @@
#ifdef AS400
/* OS400 use 64 bits ThreadId, get only low 32 bits for now */
pthread_id_np_t tid;
- pthread_getunique_np(&t, &tid);
+ pthread_getunique_np(&t, &tid);
return ((int)(tid.intId.lo & 0xFFFFFFFF));
#else
int tid = (int)(t & 0xFFFF);
1.31 +3 -1 jakarta-tomcat-connectors/jk/native/common/jk_util.h
Index: jk_util.h
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_util.h,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- jk_util.h 22 Feb 2005 08:42:45 -0000 1.30
+++ jk_util.h 21 Apr 2005 10:36:58 -0000 1.31
@@ -126,6 +126,8 @@
int jk_is_cmd_line_poperty(const char *prp_name);
+int jk_is_unique_property(const char *prp_name);
+
int jk_get_worker_stdout(jk_map_t *m, const char *wname, const char
**stdout_name);
int jk_get_worker_stderr(jk_map_t *m, const char *wname, const char
**stderr_name);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]