You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Alexei Kosut <ak...@hyperreal.com> on 1996/04/10 01:06:05 UTC

cvs commit: apache/src http_request.c

akosut      96/04/09 16:06:04

  Modified:    src       http_request.c
  Log:
  Change the access file parsing so that <Location> sections are parsed
  after <Directory> sections. This lets the latter override the former,
  which in most cases is the desired behavior.
  
  Revision  Changes    Path
  1.6       +56 -41    apache/src/http_request.c
  
  Index: http_request.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_request.c,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -C3 -r1.5 -r1.6
  *** http_request.c	1996/04/06 23:38:26	1.5
  --- http_request.c	1996/04/09 23:06:03	1.6
  ***************
  *** 192,247 ****
        core_server_config *sconf = get_module_config (r->server->module_config,
    						   &core_module);
        array_header *sec_array = copy_array (r->pool, sconf->sec);
  -     array_header *url_array = copy_array (r->pool, sconf->sec_url);
        void *per_dir_defaults = r->server->lookup_defaults;
        
        core_dir_config **sec = (core_dir_config **)sec_array->elts;
        int num_sec = sec_array->nelts;
        char *test_filename = pstrdup (r->pool, r->filename);
    
  -     core_dir_config **url = (core_dir_config **)url_array->elts;
  -     int num_url = url_array->nelts;
  -     char *test_location = pstrdup (r->pool, r->uri);
  - 
        int num_dirs, res;
        int i;
    
  -     /* First, go through the location entries, and check for matches. */
  - 
  -     if (num_url) {
  -         void *this_conf, *entry_config;
  - 	core_dir_config *entry_core;
  - 	char *entry_url;
  - 	int j;
  - 
  - /* 
  -  * we apply the directive sections in some order; should really try them
  -  * with the most general first.
  -  */
  - 	for (j = 0; j < num_url; ++j) {
  - 
  - 	    entry_config = url[j];
  - 	    if (!entry_config) continue;
  - 	    
  - 	    entry_core =(core_dir_config *)
  - 		get_module_config(entry_config, &core_module);
  - 	    entry_url = entry_core->d;
  - 
  - 	    this_conf = NULL;
  - 	    if (is_matchexp(entry_url)) {
  - 		if (!strcmp_match(test_location, entry_url))
  - 		    this_conf = entry_config;
  - 	    }
  - 	    else if (!strncmp (test_location, entry_url, strlen(entry_url)))
  - 	        this_conf = entry_config;
  - 
  - 	    if (this_conf)
  - 	        per_dir_defaults = merge_per_dir_configs (r->pool,
  - 					    per_dir_defaults, this_conf);
  - 	}
  - 
  -     }
  - 
        /* Are we dealing with a file? If not, we can (hopefuly) safely assume
         * we have a handler that doesn't require one, but for safety's sake,
         * and so we have something find_types() can get something out of,
  --- 192,206 ----
  ***************
  *** 391,396 ****
  --- 350,406 ----
    				 */
    }
    
  + int location_walk (request_rec *r)
  + {
  +     core_server_config *sconf = get_module_config (r->server->module_config,
  + 						   &core_module);
  +     array_header *url_array = copy_array (r->pool, sconf->sec_url);
  +     void *per_dir_defaults = r->per_dir_config;
  +     
  +     core_dir_config **url = (core_dir_config **)url_array->elts;
  +     int num_url = url_array->nelts;
  +     char *test_location = pstrdup (r->pool, r->uri);
  + 
  +     /* Go through the location entries, and check for matches. */
  + 
  +     if (num_url) {
  +         void *this_conf, *entry_config;
  + 	core_dir_config *entry_core;
  + 	char *entry_url;
  + 	int j;
  + 
  + /* 
  +  * we apply the directive sections in some order; should really try them
  +  * with the most general first.
  +  */
  + 	for (j = 0; j < num_url; ++j) {
  + 
  + 	    entry_config = url[j];
  + 	    if (!entry_config) continue;
  + 	    
  + 	    entry_core =(core_dir_config *)
  + 		get_module_config(entry_config, &core_module);
  + 	    entry_url = entry_core->d;
  + 
  + 	    this_conf = NULL;
  + 	    if (is_matchexp(entry_url)) {
  + 		if (!strcmp_match(test_location, entry_url))
  + 		    this_conf = entry_config;
  + 	    }
  + 	    else if (!strncmp (test_location, entry_url, strlen(entry_url)))
  + 	        this_conf = entry_config;
  + 
  + 	    if (this_conf)
  + 	        per_dir_defaults = merge_per_dir_configs (r->pool,
  + 					    per_dir_defaults, this_conf);
  + 	}
  + 
  + 	r->per_dir_config = per_dir_defaults;
  +     }
  + 
  +     return OK;
  + }
  + 
    /*****************************************************************
     *
     * The sub_request mechanism.
  ***************
  *** 685,690 ****
  --- 695,705 ----
        }
        
        if ((access_status = directory_walk (r))) {
  +         die (access_status, r);
  + 	return;
  +     }	
  +     
  +     if ((access_status = location_walk (r))) {
            die (access_status, r);
    	return;
        }	
  
  
  

Re: cvs commit: apache/src http_request.c

Posted by Alexei Kosut <ak...@nueva.pvt.k12.ca.us>.
On Tue, 9 Apr 1996, Alexei Kosut wrote:

>   Change the access file parsing so that <Location> sections are parsed
>   after <Directory> sections. This lets the latter override the former,
>   which in most cases is the desired behavior.

Oops... this log is incorrect. I meant "This lets the former override
the latter" (<Location> overriding <Directory>)

--
________________________________________________________________________
Alexei Kosut <ak...@nueva.pvt.k12.ca.us>
URL: http://www.nueva.pvt.k12.ca.us/~akosut/
Lefler on IRC, DALnet <http://www.dal.net/>