I also  have the pending patch... To prevent typos in the properties no
beeing detected what starting httpd.

Should I include it?

Cheers

Jean-Frederic
Index: apache-1.3/mod_jk.c
===================================================================
--- apache-1.3/mod_jk.c	(revision 510645)
+++ apache-1.3/mod_jk.c	(working copy)
@@ -2512,8 +2512,8 @@
             ap_log_error(APLOG_MARK, APLOG_EMERG, s,
                          "No worker file and no worker options in httpd.conf "
                          "use JkWorkerFile to set workers");
-            return;
         }
+        jk_error_exit(APLOG_MARK, APLOG_EMERG, s, p, "Error in reading worker properties");
 
     }
 #if MODULE_MAGIC_NUMBER >= 19980527
Index: common/jk_map.c
===================================================================
--- common/jk_map.c	(revision 510645)
+++ common/jk_map.c	(working copy)
@@ -365,6 +365,13 @@
             trim(v);
             if (strlen(v) && strlen(prp)) {
                 const char *oldv = jk_map_get_string(m, prp, NULL);
+                if (!jk_is_valid_property(prp)) {
+                    jk_log(l, JK_LOG_ERROR,
+                           "The attribute '%s' is not supported - please check"
+                           " the documentation for the supported attributes.",
+                           prp);
+                    return JK_FALSE;
+                }
                 if (jk_is_deprecated_property(prp)) {
                     jk_log(l, JK_LOG_WARNING,
                            "The attribute '%s' is deprecated - please check"
Index: common/jk_util.c
===================================================================
--- common/jk_util.c	(revision 510645)
+++ common/jk_util.c	(working copy)
@@ -96,7 +96,9 @@
 
 #define DEFAULT_WORKER              JK_AJP13_WORKER_NAME
 #define WORKER_LIST_PROPERTY_NAME     ("worker.list")
+#define LIST_PROPERTY_NAME            ("list")
 #define WORKER_MAINTAIN_PROPERTY_NAME ("worker.maintain")
+#define MAINTAIN_PROPERTY_NAME        ("maintain")
 #define DEFAULT_MAINTAIN_TIME       (60)
 #define DEFAULT_LB_FACTOR           (1)
 #define DEFAULT_DISTANCE            (0)
@@ -209,6 +211,70 @@
     NULL
 };
 
+static const char *supported_properties[] = {
+    SYSPROPS_OF_WORKER,
+    STDERR_OF_WORKER,
+    STDOUT_OF_WORKER,
+    SECRET_OF_WORKER,
+    MX_OF_WORKER,
+    MS_OF_WORKER,
+    CP_OF_WORKER,
+    BRIDGE_OF_WORKER,
+    JVM_OF_WORKER,
+    LIBPATH_OF_WORKER,
+    CMD_LINE_OF_WORKER,
+    NATIVE_LIB_OF_WORKER,
+    HOST_OF_WORKER,
+    PORT_OF_WORKER,
+    TYPE_OF_WORKER,
+    CACHE_OF_WORKER_DEPRECATED,
+    CACHE_OF_WORKER,
+    CACHE_OF_WORKER_MIN,
+    CACHE_TIMEOUT_DEPRECATED,
+    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_DEPRECATED,
+    LOAD_FACTOR_OF_WORKER,
+    DISTANCE_OF_WORKER,
+    BALANCED_WORKERS_DEPRECATED,
+    BALANCE_WORKERS,
+    STICKY_SESSION,
+    STICKY_SESSION_FORCE,
+    JVM_ROUTE_OF_WORKER_DEPRECATED,
+    ROUTE_OF_WORKER,
+    DOMAIN_OF_WORKER,
+    REDIRECT_OF_WORKER,
+    MOUNT_OF_WORKER,
+    METHOD_OF_WORKER,
+    LOCK_OF_WORKER,
+    IS_WORKER_DISABLED_DEPRECATED,
+    IS_WORKER_STOPPED_DEPRECATED,
+    ACTIVATION_OF_WORKER,
+    WORKER_RECOVER_TIME,
+    WORKER_MAX_PACKET_SIZE,
+    STYLE_SHEET_OF_WORKER,
+    NAMESPACE_OF_WORKER,
+    XML_NAMESPACE_OF_WORKER,
+    XML_DOCTYPE_OF_WORKER,
+    PROP_PREFIX_OF_WORKER,
+    READ_ONLY_OF_WORKER,
+    USER_OF_WORKER,
+    USER_CASE_OF_WORKER,
+    GOOD_RATING_OF_WORKER,
+    BAD_RATING_OF_WORKER,
+    SECRET_KEY_OF_WORKER,
+    RETRIES_OF_WORKER,
+    STATUS_FAIL_OF_WORKER,
+    LIST_PROPERTY_NAME,
+    MAINTAIN_PROPERTY_NAME
+};
+
 /* All entries need to have fixed length 8 chars! */
 static const char *jk_level_verbs[] = {
     "[" JK_LOG_TRACE_VERB "] ",
@@ -1454,6 +1520,37 @@
     }
     return JK_FALSE;
 }
+/*
+ * Check that property is a valid one (to prevent user typos).
+ */
+int jk_is_valid_property(const char *prp_name)
+{
+    const char **props = &list_properties[0];
+    while (*props) {
+        if (jk_is_some_property(prp_name, *props, "."))
+            return JK_TRUE;
+        props++;
+    }
+    props = &unique_properties[0];
+    while (*props) {
+        if (jk_is_some_property(prp_name, *props, "."))
+            return JK_TRUE;
+        props++;
+    }
+    props = &deprecated_properties[0];
+    while (*props) {
+        if (jk_is_some_property(prp_name, *props, "."))
+            return JK_TRUE;
+        props++;
+    }
+    props = &supported_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)
 {
Index: apache-2.0/mod_jk.c
===================================================================
--- apache-2.0/mod_jk.c	(revision 510645)
+++ apache-2.0/mod_jk.c	(working copy)
@@ -249,7 +249,7 @@
 static int JK_METHOD ws_read(jk_ws_service_t *s,
                              void *b, unsigned len, unsigned *actually_read);
 
-static void init_jk(apr_pool_t * pconf, jk_server_conf_t * conf,
+static int init_jk(apr_pool_t * pconf, jk_server_conf_t * conf,
                     server_rec * s);
 
 static int JK_METHOD ws_write(jk_ws_service_t *s, const void *b, unsigned l);
@@ -2577,7 +2577,7 @@
     SetHandler and normal apache directives ( but minimal jk-specific
     stuff )
 */
-static void init_jk(apr_pool_t * pconf, jk_server_conf_t * conf,
+static int init_jk(apr_pool_t * pconf, jk_server_conf_t * conf,
                     server_rec * s)
 {
     int rc;
@@ -2633,12 +2633,14 @@
                          0, NULL,
                          "No worker file and no worker options in httpd.conf"
                          "use JkWorkerFile to set workers");
-            return;
         }
+        ap_log_error(APLOG_MARK, APLOG_EMERG | APLOG_NOERRNO, 0, NULL, "Error in reading worker properties");
+        return !OK;
     }
 
     if (jk_map_resolve_references(init_map, "worker.", 1, 1, conf->log) == JK_FALSE) {
-        jk_error_exit(APLOG_MARK, APLOG_EMERG, s, pconf, "Error in resolving configuration references");
+        ap_log_error(APLOG_MARK, APLOG_EMERG | APLOG_NOERRNO, 0, NULL, "Error in resolving configuration references");
+        return !OK;
     }
 
     /* we add the URI->WORKER MAP since workers using AJP14
@@ -2653,6 +2655,7 @@
     if (wc_open(init_map, &worker_env, conf->log)) {
         ap_add_version_component(pconf, JK_EXPOSED_VERSION);
     }
+    return OK;
 }
 
 static int jk_post_config(apr_pool_t * pconf,
@@ -2670,7 +2673,7 @@
                                       pconf)) != APR_SUCCESS) {
         ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
                      "mod_jk: could not create jk_log_lock");
-        return HTTP_INTERNAL_SERVER_ERROR;
+        return !OK;
     }
 
 #if JK_NEED_SET_MUTEX_PERMS
@@ -2679,7 +2682,7 @@
         ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
                      "mod_jk: Could not set permissions on "
                      "jk_log_lock; check User and Group directives");
-        return HTTP_INTERNAL_SERVER_ERROR;
+        return !OK;
     }
 #endif
 
@@ -2697,7 +2700,7 @@
                 jk_server_conf_t *sconf = (jk_server_conf_t *)ap_get_module_config(srv->module_config,
                                                                                    &jk_module);
                 if (open_jklog(srv, pconf))
-                    return HTTP_INTERNAL_SERVER_ERROR;
+                    return !OK;
                 if (sconf) {
                     if (!uri_worker_map_alloc(&(sconf->uw_map),
                                               sconf->uri_to_context, sconf->log))
@@ -2745,7 +2748,8 @@
                     }
                 }
             }
-            init_jk(pconf, conf, s);
+            if (init_jk(pconf, conf, s))
+                return !OK;
         }
     }
 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to