file: re-run json handler script after file fallback redirect
[project/uhttpd.git] / file.c
diff --git a/file.c b/file.c
index e801a9ecc29286405944641169bed1ec78fb77ff..047b4daccb879a331b0b627ef04dd9ed47f5da3a 100644 (file)
--- a/file.c
+++ b/file.c
@@ -565,11 +565,12 @@ static void uh_file_free(struct client *cl)
 static void uh_file_data(struct client *cl, struct path_info *pi, int fd)
 {
        /* test preconditions */
-       if (!uh_file_if_modified_since(cl, &pi->stat) ||
-               !uh_file_if_match(cl, &pi->stat) ||
-               !uh_file_if_range(cl, &pi->stat) ||
-               !uh_file_if_unmodified_since(cl, &pi->stat) ||
-               !uh_file_if_none_match(cl, &pi->stat)) {
+       if (!cl->dispatch.no_cache &&
+           (!uh_file_if_modified_since(cl, &pi->stat) ||
+            !uh_file_if_match(cl, &pi->stat) ||
+            !uh_file_if_range(cl, &pi->stat) ||
+            !uh_file_if_unmodified_since(cl, &pi->stat) ||
+            !uh_file_if_none_match(cl, &pi->stat))) {
                ustream_printf(cl->us, "\r\n");
                uh_request_done(cl);
                close(fd);
@@ -878,9 +879,14 @@ void uh_handle_request(struct client *cl)
        if (__handle_file_request(cl, url))
                return;
 
-       if (uh_handler_run(cl, &url, true) &&
-           (!url || __handle_file_request(cl, url)))
-               return;
+       if (uh_handler_run(cl, &url, true)) {
+               if (!url)
+                       return;
+
+               uh_handler_run(cl, &url, false);
+               if (__handle_file_request(cl, url))
+                       return;
+       }
 
        req->redirect_status = 404;
        if (conf.error_handler) {