Fix for www file areas
This commit is contained in:
parent
600c5d588f
commit
edb7209a9b
BIN
dist/ansis/bulletin1.ans
vendored
BIN
dist/ansis/bulletin1.ans
vendored
Binary file not shown.
102
src/www.c
102
src/www.c
@ -888,63 +888,67 @@ int www_handler(void * cls, struct MHD_Connection * connection, const char * url
|
|||||||
free(url_copy);
|
free(url_copy);
|
||||||
|
|
||||||
if (file_dir != -1 && file_sub != -1 && filen == NULL) {
|
if (file_dir != -1 && file_sub != -1 && filen == NULL) {
|
||||||
if (conf.file_directories[file_dir]->display_on_web) {
|
if (file_dir >= 0 && file_dir < conf.file_directory_count && file_sub >= 0 && file_sub < conf.file_directories[file_dir]->file_sub_count) {
|
||||||
page = www_files_display_listing(file_dir, file_sub);
|
if (conf.file_directories[file_dir]->display_on_web) {
|
||||||
|
page = www_files_display_listing(file_dir, file_sub);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (file_dir != -1 && file_sub != -1 && filen != NULL) {
|
} else if (file_dir != -1 && file_sub != -1 && filen != NULL) {
|
||||||
if (conf.file_directories[file_dir]->display_on_web) {
|
if (file_dir >= 0 && file_dir < conf.file_directory_count && file_sub >= 0 && file_sub < conf.file_directories[file_dir]->file_sub_count) {
|
||||||
// send file
|
if (conf.file_directories[file_dir]->display_on_web) {
|
||||||
filename = www_files_get_from_area(file_dir, file_sub, filen);
|
// send file
|
||||||
mime = NULL;
|
filename = www_files_get_from_area(file_dir, file_sub, filen);
|
||||||
// get mimetype
|
mime = NULL;
|
||||||
for (i=strlen(filename);i>0;--i) {
|
// get mimetype
|
||||||
if (filename[i] == '.') {
|
for (i=strlen(filename);i>0;--i) {
|
||||||
mime = www_get_mime_type(&filename[i+1]);
|
if (filename[i] == '.') {
|
||||||
break;
|
mime = www_get_mime_type(&filename[i+1]);
|
||||||
}
|
break;
|
||||||
if (filename[i] == '/') {
|
}
|
||||||
mime = www_get_mime_type(NULL);
|
if (filename[i] == '/') {
|
||||||
break;
|
mime = www_get_mime_type(NULL);
|
||||||
}
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
if (mime = NULL) {
|
|
||||||
mime = www_get_mime_type(NULL);
|
|
||||||
}
|
|
||||||
free(filen);
|
|
||||||
if (filename != NULL) {
|
|
||||||
if (stat(filename, &s) == 0 && S_ISREG(s.st_mode)) {
|
|
||||||
fno = open(filename, O_RDONLY);
|
|
||||||
if (fno != -1) {
|
|
||||||
|
|
||||||
|
|
||||||
response = MHD_create_response_from_fd(s.st_size, fno);
|
|
||||||
MHD_add_response_header(response, MHD_HTTP_HEADER_CONTENT_TYPE, mime);
|
|
||||||
sprintf(buffer, "%ld", s.st_size);
|
|
||||||
MHD_add_response_header(response, MHD_HTTP_HEADER_CONTENT_LENGTH, buffer);
|
|
||||||
|
|
||||||
snprintf(buffer, PATH_MAX, "attachment; filename=\"%s\"", basename(filename));
|
|
||||||
MHD_add_response_header(response, MHD_HTTP_HEADER_CONTENT_DISPOSITION, buffer);
|
|
||||||
ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
|
|
||||||
MHD_destroy_response (response);
|
|
||||||
free(header);
|
|
||||||
free(footer);
|
|
||||||
free(filename);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(filename);
|
|
||||||
}
|
if (mime = NULL) {
|
||||||
if (www_404(header, footer, connection) != 0) {
|
mime = www_get_mime_type(NULL);
|
||||||
|
}
|
||||||
|
free(filen);
|
||||||
|
if (filename != NULL) {
|
||||||
|
if (stat(filename, &s) == 0 && S_ISREG(s.st_mode)) {
|
||||||
|
fno = open(filename, O_RDONLY);
|
||||||
|
if (fno != -1) {
|
||||||
|
|
||||||
|
|
||||||
|
response = MHD_create_response_from_fd(s.st_size, fno);
|
||||||
|
MHD_add_response_header(response, MHD_HTTP_HEADER_CONTENT_TYPE, mime);
|
||||||
|
sprintf(buffer, "%ld", s.st_size);
|
||||||
|
MHD_add_response_header(response, MHD_HTTP_HEADER_CONTENT_LENGTH, buffer);
|
||||||
|
|
||||||
|
snprintf(buffer, PATH_MAX, "attachment; filename=\"%s\"", basename(filename));
|
||||||
|
MHD_add_response_header(response, MHD_HTTP_HEADER_CONTENT_DISPOSITION, buffer);
|
||||||
|
ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
|
||||||
|
MHD_destroy_response (response);
|
||||||
|
free(header);
|
||||||
|
free(footer);
|
||||||
|
free(filename);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(filename);
|
||||||
|
}
|
||||||
|
if (www_404(header, footer, connection) != 0) {
|
||||||
|
free(header);
|
||||||
|
free(footer);
|
||||||
|
return MHD_NO;
|
||||||
|
}
|
||||||
free(header);
|
free(header);
|
||||||
free(footer);
|
free(footer);
|
||||||
return MHD_NO;
|
return MHD_YES;
|
||||||
}
|
}
|
||||||
free(header);
|
free(filen);
|
||||||
free(footer);
|
|
||||||
return MHD_YES;
|
|
||||||
}
|
}
|
||||||
free(filen);
|
|
||||||
}
|
}
|
||||||
if (page == NULL) {
|
if (page == NULL) {
|
||||||
if (www_403(header, footer, connection) != 0) {
|
if (www_403(header, footer, connection) != 0) {
|
||||||
|
Reference in New Issue
Block a user