exists = !!canonpath(uh_buf, path_phys);
uh_buf[i] = ch;
+ if (!exists)
+ continue;
+
+ /* test current path */
+ if (stat(path_phys, &p.stat))
+ continue;
+
snprintf(path_info, sizeof(path_info), "%s", uh_buf + i);
break;
}
path_phys[docroot_len] != '/'))
return NULL;
- /* test current path */
- if (stat(path_phys, &p.stat))
- return NULL;
-
/* is a regular file */
if (p.stat.st_mode & S_IFREG) {
p.root = docroot;
void uh_handle_request(struct client *cl)
{
+ struct http_request *req = &cl->request;
struct dispatch_handler *d;
char *url = blobmsg_data(blob_data(cl->hdr.head));;
char *error_handler;
+ req->redirect_status = 200;
d = dispatch_find(url, NULL);
if (d) {
d->handle_request(cl, url, NULL);
if (__handle_file_request(cl, url))
return;
- error_handler = alloca(strlen(conf.error_handler) + 1);
- strcpy(error_handler, conf.error_handler);
- if (__handle_file_request(cl, error_handler))
- return;
+ req->redirect_status = 404;
+ if (conf.error_handler) {
+ error_handler = alloca(strlen(conf.error_handler) + 1);
+ strcpy(error_handler, conf.error_handler);
+ if (__handle_file_request(cl, error_handler))
+ return;
+ }
uh_client_error(cl, 404, "Not Found", "The requested URL %s was not found on this server.", url);
}