sharedir: allow reading anything stored or linked from sharedir
In particular, we want to allow symlinks to external resources..
This commit is contained in:
parent
6b4661a758
commit
c1d29a2399
@ -42,19 +42,19 @@ static size_t get_file_size(const char* file){
|
|||||||
|
|
||||||
static char* sharedir_scan(sharedir_t* self, const char* file){
|
static char* sharedir_scan(sharedir_t* self, const char* file){
|
||||||
|
|
||||||
char* path = NULL;
|
/*
|
||||||
assert(asprintf(&path, "%s/%s", self->dir, file) != -1);
|
* Agent is not under our control, but lets roughly constrain
|
||||||
|
* it to anything stored in or linked from sharedir
|
||||||
|
*/
|
||||||
|
chdir(self->dir);
|
||||||
|
char* real_path = realpath(file, NULL);
|
||||||
|
|
||||||
char* real_path = realpath(path, NULL);
|
if (file[0] != '/' && !strstr(file, "/../") &&
|
||||||
|
real_path && file_exits(real_path)) {
|
||||||
free(path);
|
|
||||||
if(real_path && !strncmp(self->dir, real_path, strlen(self->dir)) && file_exits(real_path)){
|
|
||||||
return real_path;
|
return real_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(real_path){
|
|
||||||
free(real_path);
|
free(real_path);
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,15 +115,15 @@ static FILE* get_file_ptr(sharedir_t* self, sharedir_file_t* obj){
|
|||||||
if(obj == self->last_file_obj_ptr && self->last_file_f){
|
if(obj == self->last_file_obj_ptr && self->last_file_f){
|
||||||
return self->last_file_f;
|
return self->last_file_f;
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
if(self->last_file_f){
|
if(self->last_file_f){
|
||||||
fclose(self->last_file_f);
|
fclose(self->last_file_f);
|
||||||
}
|
}
|
||||||
|
|
||||||
FILE* f = fopen(obj->path, "r");
|
FILE* f = fopen(obj->path, "r");
|
||||||
self->last_file_f = f;
|
self->last_file_f = f;
|
||||||
self->last_file_obj_ptr = obj;
|
self->last_file_obj_ptr = obj;
|
||||||
return f;
|
return f;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t sharedir_request_file(sharedir_t* self, const char* file, uint8_t* page_buffer){
|
uint64_t sharedir_request_file(sharedir_t* self, const char* file, uint8_t* page_buffer){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user