Author: rjung
Date: Sun Jun 24 03:33:27 2007
New Revision: 550203

URL: http://svn.apache.org/viewvc?view=rev&rev=550203
Log:
Common: Refactored and unified jk_map_read_prop* and jk_map_load_prop*
for all use cases.

Modified:
    tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c
    tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c
    tomcat/connectors/trunk/jk/native/common/jk_map.c
    tomcat/connectors/trunk/jk/native/common/jk_map.h
    tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.c
    tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c
    tomcat/connectors/trunk/jk/native/netscape/jk_nsapi_plugin.c
    tomcat/connectors/trunk/jk/native/nt_service/jk_nt_service.c
    tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml

Modified: tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c?view=diff&rev=550203&r1=550202&r2=550203
==============================================================================
--- tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c (original)
+++ tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c Sun Jun 24 03:33:27 
2007
@@ -1822,7 +1822,8 @@
         (jk_server_conf_t *) ap_get_module_config(s->module_config,
                                                   &jk_module);
 
-    if (jk_map_read_property(conf->worker_properties, line, 1, conf->log) == 
JK_FALSE)
+    if (jk_map_read_property(conf->worker_properties, line,
+                             JK_MAP_HANDLE_DUPLICATES, conf->log) == JK_FALSE)
         return ap_pstrcat(cmd->temp_pool, "Invalid JkWorkerProperty ", line, 
NULL);
 
     return NULL;
@@ -2628,7 +2629,8 @@
 */
 
     if ((conf->worker_file != NULL) &&
-        !jk_map_read_properties(init_map, conf->worker_file, NULL, 1, 
conf->log)) {
+        !jk_map_read_properties(init_map, conf->worker_file, NULL,
+                                JK_MAP_HANDLE_DUPLICATES, conf->log)) {
         jk_error_exit(APLOG_MARK, APLOG_EMERG | APLOG_NOERRNO, s, p,
                       "Error in reading worker properties from '%s'",
                       conf->worker_file);

Modified: tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c?view=diff&rev=550203&r1=550202&r2=550203
==============================================================================
--- tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c (original)
+++ tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c Sun Jun 24 03:33:27 
2007
@@ -1859,7 +1859,8 @@
         return err_string;
     }
 
-    if (jk_map_read_property(conf->worker_properties, line, 1, conf->log) == 
JK_FALSE)
+    if (jk_map_read_property(conf->worker_properties, line,
+                             JK_MAP_HANDLE_DUPLICATES, conf->log) == JK_FALSE)
         return apr_pstrcat(cmd->temp_pool, "Invalid JkWorkerProperty ", line, 
NULL);
 
     return NULL;
@@ -2746,7 +2747,8 @@
     jk_set_worker_def_cache_size(mpm_threads);
 
     if ((conf->worker_file != NULL) &&
-        !jk_map_read_properties(init_map, conf->worker_file, NULL, 1, 
conf->log)) {
+        !jk_map_read_properties(init_map, conf->worker_file, NULL,
+                                JK_MAP_HANDLE_DUPLICATES, conf->log)) {
         ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s,
                      "Error in reading worker properties from '%s'",
                      conf->worker_file);

Modified: tomcat/connectors/trunk/jk/native/common/jk_map.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_map.c?view=diff&rev=550203&r1=550202&r2=550203
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_map.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_map.c Sun Jun 24 03:33:27 2007
@@ -395,7 +395,66 @@
     return rc;
 }
 
-int jk_map_read_property(jk_map_t *m, const char *str, int allow_duplicates, 
jk_logger_t *l)
+
+static int jk_map_validate_property(char *prp, jk_logger_t *l)
+{
+    int off = (int)strlen(prp) - (int)JK_MAP_REFERENCE_SZ;
+    /* check the worker properties */
+    if (off <= 0 || strncmp(&prp[off], JK_MAP_REFERENCE, JK_MAP_REFERENCE_SZ) 
) {
+        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"
+                   " the documentation for the correct replacement.",
+                   prp);
+        }
+    }
+    return JK_TRUE;
+}
+
+static int jk_map_handle_duplicates(jk_map_t *m, const char *prp, char *v,
+                                    int treatment, jk_logger_t *l)
+{
+    const char *oldv = jk_map_get_string(m, prp, NULL);
+    if (oldv) {
+        if ((treatment == JK_MAP_HANDLE_DUPLICATES)
+            && jk_is_unique_property(prp) == JK_FALSE) {
+            char *tmpv = jk_pool_alloc(&m->p,
+                                       strlen(v) + strlen(oldv) + 3);
+            if (tmpv) {
+                char sep = '*';
+                if (jk_is_path_property(prp))
+                    sep = PATH_SEPERATOR;
+                else if (jk_is_cmd_line_property(prp))
+                    sep = ' ';
+                else if (jk_is_list_property(prp))
+                    sep = ',';
+                sprintf(tmpv, "%s%c%s", oldv, sep, v);
+            }
+            v = tmpv;
+            return JK_FALSE;
+        }
+        else {
+            jk_log(l, JK_LOG_WARNING,
+                   "Duplicate key '%s' detected - previous value '%s'"
+                   " will be overwritten with '%s'.",
+                   prp, oldv ? oldv : "(null)", v ? v : "(null)");
+            return JK_TRUE;
+        }
+    }
+    else {
+        return JK_TRUE;
+    }
+}
+
+int jk_map_read_property(jk_map_t *m, const char *str,
+                         int treatment, jk_logger_t *l)
 {
     int rc = JK_TRUE;
     char buf[LENGTH_OF_LINE + 1];
@@ -417,52 +476,15 @@
             trim(prp);
             trim(v);
             if (strlen(v) && strlen(prp)) {
-                const char *oldv;
-                int off = (int)strlen(prp) - (int)JK_MAP_REFERENCE_SZ;
-                /* check the worker properties */
-                if (off <= 0 || strncmp(&prp[off], JK_MAP_REFERENCE, 
JK_MAP_REFERENCE_SZ) ) {
-                    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"
-                               " the documentation for the correct 
replacement.",
-                               prp);
-                    }
-                }
-                oldv = jk_map_get_string(m, prp, NULL);
-                v = jk_map_replace_properties(m, v);
-                if (oldv) {
-                    if (allow_duplicates && jk_is_unique_property(prp) == 
JK_FALSE) {
-                        char *tmpv = jk_pool_alloc(&m->p,
-                                           strlen(v) + strlen(oldv) + 3);
-                        if (tmpv) {
-                            char sep = '*';
-                            if (jk_is_path_property(prp))
-                                sep = PATH_SEPERATOR;
-                            else if (jk_is_cmd_line_property(prp))
-                                sep = ' ';
-                            else if (jk_is_list_property(prp))
-                                sep = ',';
-                            sprintf(tmpv, "%s%c%s", oldv, sep, v);
-                        }
-                        v = tmpv;
-                    }
-                    else {
-                        jk_log(l, JK_LOG_WARNING,
-                               "Duplicate key '%s' detected - previous value 
'%s'"
-                               " will be overwritten with '%s'.",
-                               prp, oldv ? oldv : "(null)", v ? v : "(null)");
-                        v = jk_pool_strdup(&m->p, v);
-                    }
+                if (treatment == JK_MAP_HANDLE_RAW) {
+                    v = jk_pool_strdup(&m->p, v);
                 }
                 else {
-                    v = jk_pool_strdup(&m->p, v);
+                    if (jk_map_validate_property(prp, l) == JK_FALSE)
+                        return JK_FALSE;
+                    v = jk_map_replace_properties(m, v);
+                    if (jk_map_handle_duplicates(m, prp, v, treatment, l) == 
JK_TRUE)
+                        v = jk_pool_strdup(&m->p, v);
                 }
                 if (v) {
                     jk_map_put(m, prp, v, NULL);
@@ -478,7 +500,8 @@
 }
 
 
-int jk_map_read_properties(jk_map_t *m, const char *f, time_t *modified, int 
allow_duplicates, jk_logger_t *l)
+int jk_map_read_properties(jk_map_t *m, const char *f, time_t *modified,
+                           int treatment, jk_logger_t *l)
 {
     int rc = JK_FALSE;
 
@@ -502,7 +525,7 @@
             while (NULL != (prp = fgets(buf, LENGTH_OF_LINE, fp))) {
                 trim_prp_comment(prp);
                 if (*prp) {
-                    if ((rc = jk_map_read_property(m, prp, allow_duplicates, 
l)) == JK_FALSE)
+                    if ((rc = jk_map_read_property(m, prp, treatment, l)) == 
JK_FALSE)
                         break;
                 }
             }
@@ -806,78 +829,3 @@
     }
     return rc;
 }
-
-int jk_map_load_property(jk_map_t *m, const char *str, jk_logger_t *l)
-{
-    int rc = JK_TRUE;
-    char buf[LENGTH_OF_LINE + 1];
-    char *prp = &buf[0];
-
-    if (strlen(str) > LENGTH_OF_LINE) {
-        jk_log(l, JK_LOG_WARNING,
-               "Line to long (%d > %d), ignoring entry",
-               strlen(str), LENGTH_OF_LINE);
-        return JK_FALSE;
-    }
-
-    strcpy(prp, str);
-    if (trim(prp)) {
-        char *v = strchr(prp, '=');
-        if (v) {
-            *v = '\0';
-            v++;
-            trim(prp);
-            trim(v);
-            if (strlen(v) && strlen(prp)) {
-                v = jk_pool_strdup(&m->p, v);
-                if (v) {
-                    jk_map_put(m, prp, v, NULL);
-                }
-                else {
-                    JK_LOG_NULL_PARAMS(l);
-                    rc = JK_FALSE;
-                }
-            }
-        }
-    }
-    return rc;
-}
-
-
-int jk_map_load_properties(jk_map_t *m, const char *f, time_t *modified, 
jk_logger_t *l)
-{
-    int rc = JK_FALSE;
-
-    if (m && f) {
-        FILE *fp;
-        struct stat statbuf;
-        if (jk_stat(f, &statbuf) == -1)
-            return JK_FALSE;
-#if defined(AS400) && !defined(AS400_UTF8)
-        fp = fopen(f, "r, o_ccsid=0");
-#else
-        fp = fopen(f, "r");
-#endif
-
-        if (fp) {
-            char buf[LENGTH_OF_LINE + 1];
-            char *prp;
-
-            rc = JK_TRUE;
-
-            while (NULL != (prp = fgets(buf, LENGTH_OF_LINE, fp))) {
-                trim_prp_comment(prp);
-                if (*prp) {
-                    if ((rc = jk_map_load_property(m, prp, l)) == JK_FALSE)
-                        break;
-                }
-            }
-            fclose(fp);
-            if (modified)
-                *modified = statbuf.st_mtime;
-        }
-    }
-
-    return rc;
-}
-

Modified: tomcat/connectors/trunk/jk/native/common/jk_map.h
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_map.h?view=diff&rev=550203&r1=550202&r2=550203
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_map.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_map.h Sun Jun 24 03:33:27 2007
@@ -30,6 +30,9 @@
 {
 #endif                          /* __cplusplus */
 
+#define JK_MAP_HANDLE_NORMAL     0
+#define JK_MAP_HANDLE_DUPLICATES 1
+#define JK_MAP_HANDLE_RAW        2
 
 struct jk_map;
 typedef struct jk_map jk_map_t;
@@ -67,19 +70,15 @@
 
 int jk_map_put(jk_map_t *m, const char *name, const void *value, void **old);
 
-int jk_map_read_property(jk_map_t *m, const char *str, int allow_duplicates, 
jk_logger_t *l);
+int jk_map_read_property(jk_map_t *m, const char *str, int treatment, 
jk_logger_t *l);
 
-int jk_map_read_properties(jk_map_t *m, const char *f, time_t *modified, int 
allow_duplicates, jk_logger_t *l);
+int jk_map_read_properties(jk_map_t *m, const char *f, time_t *modified, int 
treatment, jk_logger_t *l);
 
 int jk_map_size(jk_map_t *m);
 
 const char *jk_map_name_at(jk_map_t *m, int idex);
 
 void *jk_map_value_at(jk_map_t *m, int idex);
-
-int jk_map_load_property(jk_map_t *m, const char *str, jk_logger_t *l);
-
-int jk_map_load_properties(jk_map_t *m, const char *f, time_t *modified, 
jk_logger_t *l);
 
 /**
  *  Replace $(property) in value.

Modified: tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.c?view=diff&rev=550203&r1=550202&r2=550203
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_uri_worker_map.c Sun Jun 24 
03:33:27 2007
@@ -664,8 +664,8 @@
     jk_map_t *map;
 
     jk_map_alloc(&map);
-    if (jk_map_read_properties(map, uw_map->fname,
-                               &uw_map->modified, 0, l)) {
+    if (jk_map_read_properties(map, uw_map->fname, &uw_map->modified,
+                               JK_MAP_HANDLE_NORMAL, l)) {
         int i;
         if (JK_IS_DEBUG_LEVEL(l))
             jk_log(l, JK_LOG_DEBUG,

Modified: tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c?view=diff&rev=550203&r1=550202&r2=550203
==============================================================================
--- tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c (original)
+++ tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c Sun Jun 24 03:33:27 
2007
@@ -1691,7 +1691,8 @@
     }
 
     if (rewrite_rule_file[0] && jk_map_alloc(&rewrite_map)) {
-        if (jk_map_load_properties(rewrite_map, rewrite_rule_file, NULL, 
logger)) {
+        if (jk_map_read_properties(rewrite_map, rewrite_rule_file,
+                                   NULL, JK_MAP_HANDLE_RAW, logger)) {
             int i;
             if (JK_IS_DEBUG_LEVEL(logger)) {
                 jk_log(logger, JK_LOG_DEBUG, "Loaded rewrite rule file %s.",
@@ -1744,7 +1745,8 @@
     if (rc) {
         rc = JK_FALSE;
         if (jk_map_alloc(&workers_map)) {
-            if (jk_map_read_properties(workers_map, worker_file, NULL, 1, 
logger)) {
+            if (jk_map_read_properties(workers_map, worker_file, NULL,
+                                       JK_MAP_HANDLE_DUPLICATES, logger)) {
                 /* we add the URI->WORKER MAP since workers using AJP14 will 
feed it */
 
                 if (jk_map_resolve_references(workers_map, "worker.", 1, 1, 
logger) == JK_FALSE) {
@@ -1816,7 +1818,8 @@
     jk_map_t *map = NULL;
 
     if (jk_map_alloc(&map)) {
-        if (jk_map_read_properties(map, ini_file_name, NULL, 1, logger)) {
+        if (jk_map_read_properties(map, ini_file_name, NULL,
+                                   JK_MAP_HANDLE_DUPLICATES, logger)) {
             using_ini_file = JK_TRUE;
             src = map;
         }

Modified: tomcat/connectors/trunk/jk/native/netscape/jk_nsapi_plugin.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/netscape/jk_nsapi_plugin.c?view=diff&rev=550203&r1=550202&r2=550203
==============================================================================
--- tomcat/connectors/trunk/jk/native/netscape/jk_nsapi_plugin.c (original)
+++ tomcat/connectors/trunk/jk/native/netscape/jk_nsapi_plugin.c Sun Jun 24 
03:33:27 2007
@@ -265,7 +265,8 @@
     
     jk_shm_open(shm_file, JK_SHM_DEF_SIZE, logger);
     if (jk_map_alloc(&init_map)) {
-        if (jk_map_read_properties(init_map, worker_prp_file, NULL, 1, 
logger)) {
+        if (jk_map_read_properties(init_map, worker_prp_file, NULL,
+                                   JK_MAP_HANDLE_DUPLICATES, logger)) {
             int sleep_cnt;
             SYS_THREAD s;
 

Modified: tomcat/connectors/trunk/jk/native/nt_service/jk_nt_service.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/nt_service/jk_nt_service.c?view=diff&rev=550203&r1=550202&r2=550203
==============================================================================
--- tomcat/connectors/trunk/jk/native/nt_service/jk_nt_service.c (original)
+++ tomcat/connectors/trunk/jk/native/nt_service/jk_nt_service.c Sun Jun 24 
03:33:27 2007
@@ -956,7 +956,8 @@
             jk_map_t *init_map;
             
             if(jk_map_alloc(&init_map)) {
-                if(jk_map_read_properties(init_map, prp_file, NULL, 1, NULL)) {
+                if(jk_map_read_properties(init_map, prp_file, NULL,
+                                          JK_MAP_HANDLE_DUPLICATES, NULL)) {
                     jk_tomcat_startup_data_t data;
                     jk_pool_t p;
                     jk_pool_atom_t buf[HUGE_POOL_SIZE];

Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?view=diff&rev=550203&r1=550202&r2=550203
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Sun Jun 24 
03:33:27 2007
@@ -28,6 +28,10 @@
   <subsection name="Native">
     <changelog>
       <update>
+      Common: Refactored and unified jk_map_read_prop* and jk_map_load_prop*
+      for all use cases. (rjung)
+      </update>
+      <update>
       Common/Apache/IIS/Netscape: Add an option to check decoded URLs for
       potentially malicious constructions. (rjung)
       </update>



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

Reply via email to