You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ma...@hyperreal.org on 1999/10/11 23:33:37 UTC

cvs commit: apache-1.3/src/modules/proxy mod_proxy.h mod_proxy.c

martin      99/10/11 14:33:37

  Modified:    src      CHANGES
               src/modules/proxy mod_proxy.h mod_proxy.c
  Log:
  Graham submitted a patch which fixes a problem with the proxy
  configuration where globally set configuration options were
  overridden inside virtual hosts.
  Also, ProxyReceiveBufferSize default values were left uninitialised.
  
  Submitted by:	Graham Leggett <mi...@sharp.fm>
  Reviewed by:	Martin Kraemer
  
  Revision  Changes    Path
  1.1436    +7 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1435
  retrieving revision 1.1436
  diff -u -r1.1435 -r1.1436
  --- CHANGES	1999/09/27 20:38:32	1.1435
  +++ CHANGES	1999/10/11 21:33:30	1.1436
  @@ -1,5 +1,12 @@
   Changes with Apache 1.3.10
   
  +  *) Fix problem with proxy configuration where globally set configuration
  +     options were overridden inside virtual hosts.
  +     [Graham Leggett <mi...@sharp.fm>]
  +
  +  *) Fix ProxyReceiveBufferSize where default value was left uninitialised.
  +     [Graham Leggett <mi...@sharp.fm>]
  +
     *) Added a CLF '-' respecting %B to the log format.
        Suggested by Ragnar Kj�rstad [dirkx]
   
  
  
  
  1.44      +11 -0     apache-1.3/src/modules/proxy/mod_proxy.h
  
  Index: mod_proxy.h
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/modules/proxy/mod_proxy.h,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- mod_proxy.h	1999/02/07 20:48:31	1.43
  +++ mod_proxy.h	1999/10/11 21:33:34	1.44
  @@ -193,13 +193,21 @@
   struct cache_conf {
       const char *root;		/* the location of the cache directory */
       off_t space;			/* Maximum cache size (in 1024 bytes) */
  +    char space_set;
       time_t maxexpire;		/* Maximum time to keep cached files in secs */
  +    char maxexpire_set;
       time_t defaultexpire;	/* default time to keep cached file in secs */
  +    char defaultexpire_set;
       double lmfactor;		/* factor for estimating expires date */
  +    char lmfactor_set;
       time_t gcinterval;		/* garbage collection interval, in seconds */
  +    char gcinterval_set;
       int dirlevels;		/* Number of levels of subdirectories */
  +    char dirlevels_set;
       int dirlength;		/* Length of subdirectory names */
  +    char dirlength_set;
       float cache_completion;	/* Force cache completion after this point */
  +    char cache_completion_set;
   };
   
   typedef struct {
  @@ -213,13 +221,16 @@
       array_header *allowed_connect_ports;
       char *domain;		/* domain name to use in absence of a domain name in the request */
       int req;			/* true if proxy requests are enabled */
  +    char req_set;
       enum {
         via_off,
         via_on,
         via_block,
         via_full
       } viaopt;                   /* how to deal with proxy Via: headers */
  +    char viaopt_set;
       size_t recv_buffer_size;
  +    char recv_buffer_size_set;
   } proxy_server_conf;
   
   struct hdr_entry {
  
  
  
  1.66      +60 -1     apache-1.3/src/modules/proxy/mod_proxy.c
  
  Index: mod_proxy.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/modules/proxy/mod_proxy.c,v
  retrieving revision 1.65
  retrieving revision 1.66
  diff -u -r1.65 -r1.66
  --- mod_proxy.c	1999/03/10 17:42:46	1.65
  +++ mod_proxy.c	1999/10/11 21:33:35	1.66
  @@ -417,22 +417,69 @@
       ps->allowed_connect_ports = ap_make_array(p, 10, sizeof(int));
       ps->domain = NULL;
       ps->viaopt = via_off; /* initially backward compatible with 1.3.1 */
  +    ps->viaopt_set = 0; /* 0 means default */
       ps->req = 0;
  +    ps->req_set = 0;
  +    ps->recv_buffer_size = 0; /* this default was left unset for some reason */
  +    ps->recv_buffer_size_set = 0;
   
       ps->cache.root = NULL;
       ps->cache.space = DEFAULT_CACHE_SPACE;
  +    ps->cache.space_set = 0;
       ps->cache.maxexpire = DEFAULT_CACHE_MAXEXPIRE;
  +    ps->cache.maxexpire_set = 0;
       ps->cache.defaultexpire = DEFAULT_CACHE_EXPIRE;
  +    ps->cache.defaultexpire_set = 0;
       ps->cache.lmfactor = DEFAULT_CACHE_LMFACTOR;
  +    ps->cache.lmfactor_set = 0;
       ps->cache.gcinterval = -1;
  +    ps->cache.gcinterval_set = 0;
       /* at these levels, the cache can have 2^18 directories (256,000)  */
       ps->cache.dirlevels = 3;
  +    ps->cache.dirlevels_set = 0;
       ps->cache.dirlength = 1;
  +    ps->cache.dirlength_set = 0;
       ps->cache.cache_completion = DEFAULT_CACHE_COMPLETION;
  +    ps->cache.cache_completion_set = 0;
   
       return ps;
   }
   
  +static void *
  +     merge_proxy_config(pool *p, void *basev,
  +                        void *overridesv)
  +{
  +    proxy_server_conf *ps = ap_pcalloc(p, sizeof(proxy_server_conf));
  +    proxy_server_conf *base = (proxy_server_conf *) basev;
  +    proxy_server_conf *overrides = (proxy_server_conf *) overridesv;
  +
  +    ps->proxies = ap_append_arrays(p, base->proxies, overrides->proxies);
  +    ps->aliases = ap_append_arrays(p, base->aliases, overrides->aliases);
  +    ps->raliases = ap_append_arrays(p, base->raliases, overrides->raliases);
  +    ps->noproxies = ap_append_arrays(p, base->noproxies, overrides->noproxies);
  +    ps->dirconn = ap_append_arrays(p, base->dirconn, overrides->dirconn);
  +    ps->nocaches = ap_append_arrays(p, base->nocaches, overrides->nocaches);
  +    ps->allowed_connect_ports = ap_append_arrays(p, base->allowed_connect_ports, overrides->allowed_connect_ports);
  +
  +    ps->domain = (overrides->domain == NULL) ? base->domain : overrides->domain;
  +    ps->viaopt = (overrides->viaopt_set == 0) ? base->viaopt : overrides->viaopt;
  +    ps->req = (overrides->req_set == 0) ? base->req : overrides->req;
  +    ps->recv_buffer_size = (overrides->recv_buffer_size_set == 0) ? base->recv_buffer_size : overrides->recv_buffer_size;
  +
  +    ps->cache.root = (overrides->cache.root == NULL) ? base->cache.root : overrides->cache.root;
  +    ps->cache.space = (overrides->cache.space_set == 0) ? base->cache.space : overrides->cache.space;
  +    ps->cache.maxexpire = (overrides->cache.maxexpire_set == 0) ? base->cache.maxexpire : overrides->cache.maxexpire;
  +    ps->cache.defaultexpire = (overrides->cache.defaultexpire_set == 0) ? base->cache.defaultexpire : overrides->cache.defaultexpire;
  +    ps->cache.lmfactor = (overrides->cache.lmfactor_set == 0) ? base->cache.lmfactor : overrides->cache.lmfactor;
  +    ps->cache.gcinterval = (overrides->cache.gcinterval_set == 0) ? base->cache.gcinterval : overrides->cache.gcinterval;
  +    /* at these levels, the cache can have 2^18 directories (256,000)  */
  +    ps->cache.dirlevels = (overrides->cache.dirlevels_set == 0) ? base->cache.dirlevels : overrides->cache.dirlevels;
  +    ps->cache.dirlength = (overrides->cache.dirlength_set == 0) ? base->cache.dirlength : overrides->cache.dirlength;
  +    ps->cache.cache_completion = (overrides->cache.cache_completion_set == 0) ? base->cache.cache_completion : overrides->cache.cache_completion;
  +
  +    return ps;
  +}
  +
   static const char *
        add_proxy(cmd_parms *cmd, void *dummy, char *f, char *r)
   {
  @@ -627,6 +674,7 @@
       ap_get_module_config(parms->server->module_config, &proxy_module);
   
       psf->req = flag;
  +    psf->req_set = 1;
       return NULL;
   }
   
  @@ -641,6 +689,7 @@
       if (sscanf(arg, "%d", &val) != 1)
   	return "CacheSize value must be an integer (kBytes)";
       psf->cache.space = val;
  +    psf->cache.space_set = 1;
       return NULL;
   }
   
  @@ -665,6 +714,7 @@
       if (sscanf(arg, "%lg", &val) != 1)
   	return "CacheLastModifiedFactor value must be a float";
       psf->cache.lmfactor = val;
  +    psf->cache.lmfactor_set = 1;
   
       return NULL;
   }
  @@ -679,6 +729,7 @@
       if (sscanf(arg, "%lg", &val) != 1)
   	return "CacheMaxExpire value must be a float";
       psf->cache.maxexpire = (int) (val * (double) SEC_ONE_HR);
  +    psf->cache.maxexpire_set = 1;
       return NULL;
   }
   
  @@ -692,6 +743,7 @@
       if (sscanf(arg, "%lg", &val) != 1)
   	return "CacheDefaultExpire value must be a float";
       psf->cache.defaultexpire = (int) (val * (double) SEC_ONE_HR);
  +    psf->cache.defaultexpire_set = 1;
       return NULL;
   }
   
  @@ -705,6 +757,7 @@
       if (sscanf(arg, "%lg", &val) != 1)
   	return "CacheGcInterval value must be a float";
       psf->cache.gcinterval = (int) (val * (double) SEC_ONE_HR);
  +    psf->cache.gcinterval_set = 1;
       return NULL;
   }
   
  @@ -721,6 +774,7 @@
       if (val * psf->cache.dirlength > CACHEFILE_LEN)
   	return "CacheDirLevels*CacheDirLength value must not be higher than 20";
       psf->cache.dirlevels = val;
  +    psf->cache.dirlevels_set = 1;
       return NULL;
   }
   
  @@ -737,6 +791,7 @@
       if (val * psf->cache.dirlevels > CACHEFILE_LEN)
   	return "CacheDirLevels*CacheDirLength value must not be higher than 20";
       psf->cache.dirlength = val;
  +    psf->cache.dirlength_set = 1;
       return NULL;
   }
   
  @@ -782,6 +837,7 @@
       }
   
       psf->recv_buffer_size = s;
  +    psf->recv_buffer_size_set = 1;
       return NULL;
   }
   
  @@ -798,6 +854,8 @@
   
       if (s > 0)
         psf->cache.cache_completion = ((float)s / 100);
  +
  +    psf->cache.cache_completion = 1;
       return NULL;    
   }
   
  @@ -820,6 +878,7 @@
                  "off | on | full | block";
       }
   
  +    psf->viaopt_set = 1;
       return NULL;    
   }
   
  @@ -881,7 +940,7 @@
       NULL,			/* create per-directory config structure */
       NULL,			/* merge per-directory config structures */
       create_proxy_config,	/* create per-server config structure */
  -    NULL,			/* merge per-server config structures */
  +    merge_proxy_config,		/* merge per-server config structures */
       proxy_cmds,			/* command table */
       proxy_handlers,		/* handlers */
       proxy_trans,		/* translate_handler */