Esempio n. 1
0
/* Search down given translated URL searching for actual file name and filling
 * in path_info string.  Doesn't make any claims about file type, must be 
 * handled elsewhere.
 * Returns 0 on success, errno on failure
 */
int extract_path_info(per_request *reqInfo, struct stat *finfo)
  {
    register int x,max;
    char *str;
    int l,u;

    str = newString(HUGE_STRING_LEN,STR_TMP);

    max=count_dirs(reqInfo->filename);
    for(x=max ; x > 0 ; x--) {
        make_dirstr(reqInfo->filename,x+1,str);
	l=strlen(str);
	u=strlen(reqInfo->url);
        if(!(stat(str,finfo)) &&
	    !strcmp(reqInfo->filename+l, reqInfo->url+u-strlen(reqInfo->filename+ l))) 
	{
	  strcat(reqInfo->path_info,&(reqInfo->filename[l]));
	  reqInfo->filename[l] = '\0';
	  reqInfo->url[strlen(reqInfo->url) - strlen(reqInfo->path_info)]='\0';
	  freeString(str);
	  return 0;
        }
    }
    freeString(str);
    return errno;
}
Esempio n. 2
0
void evaluate_access(per_request *reqInfo,struct stat *finfo,int *allow,
		     char *allow_options) 
{
    int will_allow, need_auth, num_dirs;
    int need_enhance;
    char opts[MAX_STRING_LEN], override[MAX_STRING_LEN];
    char path[MAX_STRING_LEN], d[MAX_STRING_LEN];
    char errstr[MAX_STRING_LEN];
    register int x,y,z,n;

    if(S_ISDIR(finfo->st_mode)) 
      strncpy_dir(path,reqInfo->filename,MAX_STRING_LEN);
    else lim_strcpy(path,reqInfo->filename,MAX_STRING_LEN);
    
    no2slash(path);

    num_dirs = count_dirs(path);
    will_allow = FA_ALLOW; 
    need_auth = -1;
    need_enhance = -1;

    reqInfo->auth_user[0] = '\0';
    reqInfo->auth_group[0] = '\0';
    reset_mime_vars();

    for(x=0;x<num_dirs;x++) {
        opts[x] = OPT_ALL;
        override[x] = OR_ALL;
    }
Esempio n. 3
0
void get_abs_path(char **rel_path_ptr) {
	// get start path
	char *start_path = resolve_start(*rel_path_ptr);
	int total_size = count_dirs(start_path) + 1; // total size includes NULL at end
	char **start_array = extract_path_array(start_path);
	char **args = extract_path_array(*rel_path_ptr);
	int i;
	for (i = 0; args[i] != NULL; ++i) {
		start_array = add_dir(start_array, &total_size, args[i]);
	}
	int abs_size = get_abs_size(start_array);
	char *abs_path = malloc(abs_size + 1);
	abs_path[0] = '\0';
	construct_abs_path(abs_path, start_array);
	*rel_path_ptr = realloc(*rel_path_ptr, strlen(abs_path) + 1);
	strcpy(*rel_path_ptr, abs_path);
	free(abs_path);
	destroy_path_array(args);
	destroy_path_array(start_array);
	free(start_path);
}