httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Roy Fielding <field...@hyperreal.com>
Subject cvs commit: apache/src CHANGES http_request.c
Date Mon, 07 Apr 1997 11:47:07 GMT
fielding    97/04/07 04:47:07

  Modified:    src       CHANGES http_request.c
  Log:
  The addition of <Location> and <File> directives made the
  sub_req_lookup_simple() function bogus, so we now handle
  the special cases directly.  The patch affects mainly
  multiviews into a file that matches a <Files> section.
  
  Submitted by: Dean Gaudet
  Reviewed by: Roy Fielding
  
  Revision  Changes    Path
  1.225     +4 -0      apache/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache/src/CHANGES,v
  retrieving revision 1.224
  retrieving revision 1.225
  diff -C3 -r1.224 -r1.225
  *** CHANGES	1997/04/07 10:19:30	1.224
  --- CHANGES	1997/04/07 11:47:05	1.225
  ***************
  *** 1,5 ****
  --- 1,9 ----
    Changes with Apache 1.2b8
    
  +   *) The addition of <Location> and <File> directives made the
  +      sub_req_lookup_simple() function bogus, so we now handle
  +      the special cases directly.  [Dean Gaudet]
  + 
      *) We now try to log where the server is dumping core when a fatal
         signal is received.  [Ken Coar]
    
  
  
  
  1.47      +52 -55    apache/src/http_request.c
  
  Index: http_request.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_request.c,v
  retrieving revision 1.46
  retrieving revision 1.47
  diff -C3 -r1.46 -r1.47
  *** http_request.c	1997/02/21 00:22:29	1.46
  --- http_request.c	1997/04/07 11:47:05	1.47
  ***************
  *** 563,605 ****
        return rr;
    }
    
  - request_rec *sub_req_lookup_simple (const char *new_file, const request_rec *r)
  - {
  -     /* This handles the simple case, common to ..._lookup_uri and _file,
  -      * of looking up another file in the same directory.
  -      */
  -     request_rec *rnew = make_sub_request (r);
  -     pool *rnewp = rnew->pool;
  -     int res;
  -     
  -     char *udir = make_dirstr(rnewp, r->uri, count_dirs(r->uri));
  -     char *fdir = make_dirstr(rnewp, r->filename, count_dirs(r->filename));
  - 
  -     *rnew = *r;			/* Copy per_dir config, etc. */
  -     rnew->pool = rnewp;
  -     rnew->uri = make_full_path (rnewp, udir, new_file);
  -     rnew->filename = make_full_path (rnewp, fdir, new_file);
  -     set_sub_req_protocol (rnew, r);
  - 	
  -     rnew->finfo.st_mode = 0;
  -     
  -     if ((res = check_symlinks (rnew->filename, allow_options (rnew))))
  -     {
  -         rnew->status = res;
  -     }
  - 
  -     if (rnew->finfo.st_mode == 0 && stat (rnew->filename, &rnew->finfo)
< 0)
  -         rnew->finfo.st_mode = 0;
  - 
  -     if ((rnew->status == HTTP_OK) && (res = find_types (rnew)))
  -         rnew->status = res;
  -     
  -     if ((rnew->status == HTTP_OK) && (res = run_fixups (rnew)))
  -         rnew->status = res;
  -     
  -     return rnew;
  - }
  - 
    
    request_rec *sub_req_lookup_uri (const char *new_file, const request_rec *r)
    {
  --- 563,568 ----
  ***************
  *** 681,712 ****
        request_rec *rnew;
        int res;
        char *fdir;
  -     
  -     /* Check for a special case... if there are no '/' characters in new_file
  -      * at all, then we are looking at a relative lookup in the same directory.
  -      * That means we don't have to redo any access checks.
  -      */
  - 
  -     if (strchr (new_file, '/') == NULL) 
  -         return sub_req_lookup_simple (new_file, r);
    
        rnew = make_sub_request (r);
  -     fdir = make_dirstr (rnew->pool, r->filename, count_dirs (r->filename));
        rnew->request_time = r->request_time;
        rnew->connection = r->connection; /* For now... */
        rnew->server = r->server;
        rnew->request_config = create_request_config (rnew->pool);
        rnew->htaccess = r->htaccess; /* copy htaccess cache */
  -     rnew->per_dir_config = r->server->lookup_defaults;
        set_sub_req_protocol (rnew, r);
  ! 	
  !     rnew->uri = "INTERNALLY GENERATED file-relative req";
  !     rnew->filename = ((new_file[0] == '/') ?
  ! 		      pstrdup(rnew->pool,new_file) :
  ! 		      make_full_path (rnew->pool, fdir, new_file));
  ! 	
  !     if ((res = directory_walk (rnew))
  ! 	|| (res = file_walk (rnew))
            || ((satisfies(rnew)==SATISFY_ALL || satisfies(rnew)==SATISFY_NOSPEC)?
    	    ((res = check_access (rnew))
    	     || (some_auth_required (rnew) &&
  --- 644,709 ----
        request_rec *rnew;
        int res;
        char *fdir;
    
        rnew = make_sub_request (r);
        rnew->request_time = r->request_time;
        rnew->connection = r->connection; /* For now... */
        rnew->server = r->server;
        rnew->request_config = create_request_config (rnew->pool);
        rnew->htaccess = r->htaccess; /* copy htaccess cache */
        set_sub_req_protocol (rnew, r);
  !     fdir = make_dirstr (rnew->pool, r->filename, count_dirs (r->filename));
  ! 
  !     /* Check for a special case... if there are no '/' characters in new_file
  !      * at all, then we are looking at a relative lookup in the same directory.
  !      * That means we won't have to redo directory_walk, and we may not
  !      * even have to redo access checks.
  !      */
  ! 
  !     if (strchr (new_file, '/') == NULL) {
  ! 	char *udir = make_dirstr(rnew->pool, r->uri, count_dirs(r->uri));
  ! 
  ! 	rnew->uri = make_full_path (rnew->pool, udir, new_file);
  ! 	rnew->filename = make_full_path (rnew->pool, fdir, new_file);
  ! 	if (stat (rnew->filename, &rnew->finfo) < 0) {
  ! 	    rnew->finfo.st_mode = 0;
  ! 	}
  ! 
  ! 	rnew->per_dir_config = r->per_dir_config;
  ! 
  ! 	if ((res = check_symlinks (rnew->filename, allow_options (rnew)))) {
  ! 	    log_reason ("Symbolic link not allowed", rnew->filename, rnew);
  ! 	    rnew->status = res;
  ! 	    return rnew;
  ! 	}
  ! 	/* do a file_walk, if it doesn't change the per_dir_config then
  ! 	 * we know that we don't have to redo all the access checks */
  ! 	if ((res = file_walk (rnew))) {
  ! 	    rnew->status = res;
  ! 	    return rnew;
  ! 	}
  ! 	if (rnew->per_dir_config == r->per_dir_config) {
  ! 	    if ((res = find_types (rnew)) || (res = run_fixups (rnew))) {
  ! 		rnew->status = res;
  ! 	    }
  ! 	    return rnew;
  ! 	}
  !     } else {
  ! 	/* XXX: this should be set properly like it is in the same-dir case
  ! 	 * but it's actually sometimes to impossible to do it... because the
  ! 	 * file may not have a uri associated with it -djg */
  ! 	rnew->uri = "INTERNALLY GENERATED file-relative req";
  ! 	rnew->filename = ((new_file[0] == '/') ?
  ! 			pstrdup(rnew->pool,new_file) :
  ! 			make_full_path (rnew->pool, fdir, new_file));
  ! 	rnew->per_dir_config = r->server->lookup_defaults;
  ! 	res = directory_walk (rnew);
  ! 	if (!res) {
  ! 	    res = file_walk (rnew);
  ! 	}
  !     }
  ! 
  !     if (res
            || ((satisfies(rnew)==SATISFY_ALL || satisfies(rnew)==SATISFY_NOSPEC)?
    	    ((res = check_access (rnew))
    	     || (some_auth_required (rnew) &&
  
  
  

Mime
View raw message