From 528bbddafebf6d48e6d0dc29d1e2c8263ce6deb7 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Thu, 13 Feb 2014 19:43:43 +0000 Subject: [PATCH] file: invoke error handler in 403 case as well Signed-off-by: Jo-Philipp Wich --- file.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/file.c b/file.c index f16b893..055035e 100644 --- a/file.c +++ b/file.c @@ -598,10 +598,14 @@ static void uh_file_data(struct client *cl, struct path_info *pi, int fd) file_write_cb(cl); } +static bool __handle_file_request(struct client *cl, char *url); + static void uh_file_request(struct client *cl, const char *url, struct path_info *pi, struct blob_attr **tb) { int fd; + struct http_request *req = &cl->request; + char *error_handler; if (!(pi->stat.st_mode & S_IROTH)) goto error; @@ -626,6 +630,16 @@ static void uh_file_request(struct client *cl, const char *url, } error: + /* check for a previously set 403 redirect status to prevent infinite + recursion when the error page itself lacks sufficient permissions */ + if (conf.error_handler && req->redirect_status != 403) { + req->redirect_status = 403; + 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, 403, "Forbidden", "You don't have permission to access %s on this server.", url); -- 2.25.1