diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2014-02-13 19:43:43 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2014-09-03 14:03:56 +0200 |
commit | 528bbddafebf6d48e6d0dc29d1e2c8263ce6deb7 (patch) | |
tree | c2e939121f20e0347b252bece58f785d45d86488 /file.c | |
parent | b965b8cc10f094ec0408d57b1bc9aeee0bca501c (diff) |
file: invoke error handler in 403 case as well
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Diffstat (limited to 'file.c')
-rw-r--r-- | file.c | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -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); |