httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dean Gaudet <dgau...@hyperreal.org>
Subject cvs commit: apache/src CHANGES http_config.c http_config.h http_request.c
Date Wed, 06 Aug 1997 19:53:56 GMT
dgaudet     97/08/06 12:53:56

  Modified:    src       CHANGES http_config.c http_config.h http_request.c
  Log:
  This probably fixes Brian's CGI problems.  But at any rate it's necessary
  even if it isn't the exact bug that's tickling Brian.  My first directory_walk
  optimization was corrupting the htaccess cache and the cmd->path passed
  to modules via parse_htaccess().
  
  Revision  Changes    Path
  1.386     +3 -0      apache/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache/src/CHANGES,v
  retrieving revision 1.385
  retrieving revision 1.386
  diff -u -r1.385 -r1.386
  --- CHANGES	1997/08/05 10:49:39	1.385
  +++ CHANGES	1997/08/06 19:53:48	1.386
  @@ -1,4 +1,7 @@
   Changes with Apache 1.3a2
  +  
  +  *) Fix a bug introduced in 1.3a1 directory_walk regarding .htaccess files
  +     and corrupted paths.  [Dean Gaudet]
   
     *) Enhanced and cleaned up the URL rewriting engine of mod_rewrite:
        First the grouped parts of RewriteRule pattern matches (parenthesis!) can
  
  
  
  1.71      +7 -12     apache/src/http_config.c
  
  Index: http_config.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_config.c,v
  retrieving revision 1.70
  retrieving revision 1.71
  diff -u -r1.70 -r1.71
  --- http_config.c	1997/08/05 06:02:40	1.70
  +++ http_config.c	1997/08/06 19:53:50	1.71
  @@ -884,7 +884,7 @@
   
   
   int parse_htaccess(void **result, request_rec *r, int override,
  -		   char *d, const char *access_name)
  +		   const char *d, const char *access_name)
   {
       FILE *f = NULL;
       cmd_parms parms;
  @@ -907,17 +907,12 @@
       parms.pool = r->pool;
       parms.temp_pool = r->pool;
       parms.server = r->server;
  -    parms.path = d;
  +    parms.path = pstrdup (r->pool, d);
   
  -    if (access_name) {
  -	while (!f && access_name[0]) {
  -	    char *w = getword_conf(r->pool, &access_name);
  -	    filename = make_full_path(r->pool, d, w);
  -	    f=pfopen(r->pool, filename, "r");
  -	}
  -    }
  -    else {
  -	filename = make_full_path(r->pool, d, 0);
  +    /* loop through the access names and find the first one */
  +    while (!f && access_name[0]) {
  +	char *w = getword_conf(r->pool, &access_name);
  +	filename = make_full_path(r->pool, d, w);
   	f=pfopen(r->pool, filename, "r");
       }
       if(f) {
  @@ -941,7 +936,7 @@
   
   /* cache it */
       new = palloc(r->pool, sizeof(struct htaccess_result));
  -    new->dir = pstrdup(r->pool, d);
  +    new->dir = parms.path;
       new->override = override;
       new->htaccess = dc;
   /* add to head of list */
  
  
  
  1.42      +1 -1      apache/src/http_config.h
  
  Index: http_config.h
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_config.h,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- http_config.h	1997/07/28 18:22:43	1.41
  +++ http_config.h	1997/08/06 19:53:50	1.42
  @@ -302,7 +302,7 @@
   /* For http_core.c... (<Directory> command and virtual hosts) */
   
   int parse_htaccess(void **result, request_rec *r, int override,
  -		   char *path, const char *access_name);
  +		   const char *path, const char *access_name);
   const char *srm_command_loop (cmd_parms *parms, void *config);
   
   server_rec *init_virtual_host (pool *p, const char *hostname, server_rec *main_server);
  
  
  
  1.69      +15 -16    apache/src/http_request.c
  
  Index: http_request.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_request.c,v
  retrieving revision 1.68
  retrieving revision 1.69
  diff -u -r1.68 -r1.69
  --- http_request.c	1997/08/04 05:14:26	1.68
  +++ http_request.c	1997/08/06 19:53:51	1.69
  @@ -251,8 +251,7 @@
       core_dir_config **sec = (core_dir_config **)sec_array->elts;
       int num_sec = sec_array->nelts;
       char *test_filename = pstrdup (r->pool, r->filename);
  -    char *test_dirname, *test_htaccess;
  -
  +    char *test_dirname;
       int num_dirs, res;
       int i, test_filename_len;
   
  @@ -340,27 +339,27 @@
   
       if (S_ISDIR (r->finfo.st_mode)) ++num_dirs;
   
  -    /* we need somewhere to scratch while building directory names and
  -     * htaccess names
  +    /* We will use test_dirname as scratch space while we build directory
  +     * names during the walk.  Profiling shows directory_walk to be a busy
  +     * function so we try to avoid allocating lots of extra memory here.
        */
       test_dirname = palloc (r->pool, test_filename_len+1);
  -    test_htaccess = NULL;
       for (i = 1; i <= num_dirs; ++i) {
           core_dir_config *core_dir =
   	  (core_dir_config *)get_module_config(per_dir_defaults, &core_module);
   	int overrides_here;
  -        void *htaccess_conf = NULL;
  -	char *test_dirname_tail;
   	int j;
   
  -	test_dirname_tail = make_dirstr_prefix (test_dirname, test_filename, i);
  +	/* XXX: this could be made faster by only copying the next component
  +	 * rather than copying the entire thing all over.
  +	 */
  +	make_dirstr_prefix (test_dirname, test_filename, i);
   
   	/* Do symlink checks first, because they are done with the
   	 * permissions appropriate to the *parent* directory...
   	 */
   	
  -	if ((res = check_symlinks (test_dirname, core_dir->opts)))
  -	{
  +	if ((res = check_symlinks (test_dirname, core_dir->opts))) {
   	    log_reason("Symbolic link not allowed", test_dirname, r);
   	    return res;
   	}
  @@ -416,16 +415,16 @@
   	 */
   	
   	if (overrides_here) {
  +	    void *htaccess_conf = NULL;
  +
     	    res = parse_htaccess (&htaccess_conf, r, overrides_here,
    				  test_dirname, sconf->access_name);
   	    if (res) return res;
  +	    if (htaccess_conf)
  +		per_dir_defaults =
  +		    merge_per_dir_configs (r->pool, per_dir_defaults,
  +					htaccess_conf);
   	}
  -
  -	if (htaccess_conf)
  -	    per_dir_defaults =
  -	        merge_per_dir_configs (r->pool, per_dir_defaults,
  -				       htaccess_conf);
  -	
       }
   
       r->per_dir_config = per_dir_defaults;
  
  
  

Mime
View raw message