mturk       2005/02/20 04:48:51

  Modified:    jk/native/common jk_uri_worker_map.c
  Log:
  Ensure there are no duplicates entries for uriworker map.
  
  Revision  Changes    Path
  1.47      +34 -12    
jakarta-tomcat-connectors/jk/native/common/jk_uri_worker_map.c
  
  Index: jk_uri_worker_map.c
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_uri_worker_map.c,v
  retrieving revision 1.46
  retrieving revision 1.47
  diff -u -r1.46 -r1.47
  --- jk_uri_worker_map.c       20 Feb 2005 12:21:10 -0000      1.46
  +++ jk_uri_worker_map.c       20 Feb 2005 12:48:51 -0000      1.47
  @@ -95,7 +95,7 @@
       unsigned i;
   
       for (i = 0; i < uw_map->size; i++) {
  -        if (MATCH_TYPE_SUFFIX == uw_map->maps[i]->s->match_type) {
  +        if (uw_map->maps[i]->s->match_type == MATCH_TYPE_SUFFIX) {
               char *suffix_start;
               for (suffix_start = strstr(uri, uw_map->maps[i]->suffix);
                    suffix_start;
  @@ -217,19 +217,46 @@
   int uri_worker_map_add(jk_uri_worker_map_t *uw_map,
                          const char *puri, const char *worker, jk_logger_t *l)
   {
  -    uri_worker_record_t *uwr;
  +    uri_worker_record_t *uwr = NULL;
       char *uri;
       unsigned int match_type = 0;
  +    unsigned int i;
  +    int allocated = 0;
   
       JK_TRACE_ENTER(l);
  +
  +    if (*puri == '!') {
  +        match_type = MATCH_TYPE_NO_MATCH;
  +        puri++;
  +    }
  +    
  +    /* Find if duplicate entry */    
  +    for (i = 0; i < uw_map->size; i++) {
  +        uwr = uw_map->maps[i];
  +        if (strcmp(uwr->uri, puri) == 0) {
  +            if (strcmp(uwr->worker_name, worker) == 0) {
  +                jk_log(l, JK_LOG_DEBUG,
  +                       "map rule %s=%s already exists",
  +                       puri, worker);
  +                JK_TRACE_EXIT(l);
  +                return JK_TRUE;
  +            }
  +            else {
  +                jk_log(l, JK_LOG_DEBUG,
  +                       "changing map rule %s=%s ",
  +                       puri, worker);
  +                uwr->worker_name = worker;
  +                JK_TRACE_EXIT(l);
  +                return JK_TRUE;
  +            }
  +        }
  +    }
       if (uri_worker_map_realloc(uw_map) == JK_FALSE) {
           JK_TRACE_EXIT(l);
           return JK_FALSE;
       }
  -    uwr =
  -        (uri_worker_record_t *) jk_pool_alloc(&uw_map->p,
  -                                              sizeof(uri_worker_record_t));
  -
  +    uwr = (uri_worker_record_t *)jk_pool_alloc(&uw_map->p,
  +                                    sizeof(uri_worker_record_t));
       if (!uwr) {
           jk_log(l, JK_LOG_ERROR,
                  "can't alloc map entry");
  @@ -238,11 +265,6 @@
       }
       uwr->suffix = NULL;
       
  -    if (*puri == '!') {
  -        match_type = MATCH_TYPE_NO_MATCH;
  -        puri++;
  -    }
  -
       uri = jk_pool_strdup(&uw_map->p, puri);
       if (!uri || !worker) {
           jk_log(l, JK_LOG_ERROR,
  
  
  

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

Reply via email to