summaryrefslogtreecommitdiff
path: root/src/response.c
diff options
context:
space:
mode:
authorGlenn Strauss <gstrauss@gluelogic.com>2021-06-17 09:08:16 -0400
committerGlenn Strauss <gstrauss@gluelogic.com>2021-08-27 02:16:54 -0400
commit2899d7f983829c35f0a4a2f4e8cf2c134ff8e13a (patch)
tree5a0bc5fbda4ee1ae2756e3de542ee485a5bec016 /src/response.c
parent5bc92071d71cc45c582cf2a8b44e38f4817b2ecf (diff)
downloadlighttpd-git-2899d7f983829c35f0a4a2f4e8cf2c134ff8e13a.tar.gz
[core] construct file path after docroot hook
also remove some excess/duplicative trace during request processing
Diffstat (limited to 'src/response.c')
-rw-r--r--src/response.c99
1 files changed, 17 insertions, 82 deletions
diff --git a/src/response.c b/src/response.c
index 6aca7b60..0b29aef7 100644
--- a/src/response.c
+++ b/src/response.c
@@ -419,14 +419,6 @@ http_response_prepare (request_st * const r)
}
- /**
- *
- * call plugins
- *
- * - based on the clean URL
- *
- */
-
rc = plugins_call_handle_uri_clean(r);
if (HANDLER_GO_ON != rc) continue;
@@ -437,39 +429,22 @@ http_response_prepare (request_st * const r)
if (__builtin_expect( (r->http_method == HTTP_METHOD_CONNECT), 0))
return http_response_prepare_connect(r);
- /***
- *
- * border
- *
- * logical filename (URI) becomes a physical filename here
- *
- *
- *
- */
-
+ /*
+ * border between logical and physical
+ * logical path (URI) becomes a physical filename
+ */
- /* 1. stat()
- * ... ISREG() -> ok, go on
- * ... ISDIR() -> index-file -> redirect
- *
- * 2. pathinfo()
- * ... ISREG()
- *
- * 3. -> 404
- *
- */
+ /* docroot: set r->physical.doc_root and might set r->server_name */
+ buffer_clear(&r->physical.doc_root);
- /*
- * SEARCH DOCUMENT ROOT
- */
+ rc = plugins_call_handle_docroot(r);
+ if (HANDLER_GO_ON != rc) continue;
- /* set a default */
- buffer_copy_buffer(&r->physical.doc_root, r->conf.document_root);
+ /* transform r->uri.path to r->physical.rel_path (relative file path) */
buffer_copy_buffer(&r->physical.rel_path, &r->uri.path);
-
#if defined(__WIN32) || defined(__CYGWIN__)
/* strip dots from the end and spaces
*
@@ -483,8 +458,7 @@ http_response_prepare (request_st * const r)
* this behaviour. I have no idea how to push this through cygwin
*
* */
-
- if (!buffer_is_blank(&r->physical.rel_path)) {
+ {
buffer *b = &r->physical.rel_path;
size_t len = buffer_clen(b);
@@ -499,54 +473,20 @@ http_response_prepare (request_st * const r)
buffer_truncate(b, len);
}
#endif
-
- if (r->conf.log_request_handling) {
- log_error(r->conf.errh, __FILE__, __LINE__,
- "-- before doc_root");
- log_error(r->conf.errh, __FILE__, __LINE__,
- "Doc-Root : %s", r->physical.doc_root.ptr);
- log_error(r->conf.errh, __FILE__, __LINE__,
- "Rel-Path : %s", r->physical.rel_path.ptr);
- log_error(r->conf.errh, __FILE__, __LINE__,
- "Path : %s", r->physical.path.ptr);
- }
- /* the docroot plugin should set the doc_root and might also set the physical.path
- * for us (all vhost-plugins are supposed to set the doc_root)
- * (might also set r->server_name)
- */
- rc = plugins_call_handle_docroot(r);
- if (HANDLER_GO_ON != rc) continue;
-
- /* MacOS X and Windows can't distinguish between upper and lower-case
- *
- * convert to lower-case
- */
+ /* MacOS X and Windows (typically) case-insensitive filesystems */
if (r->conf.force_lowercase_filenames) {
buffer_to_lower(&r->physical.rel_path);
}
- /**
- * create physical filename
- * -> physical.path = docroot + rel_path
- *
- */
+ /* compose physical filename: physical.path = doc_root + rel_path */
+ if (buffer_is_unset(&r->physical.doc_root))
+ buffer_copy_buffer(&r->physical.doc_root, r->conf.document_root);
buffer_copy_buffer(&r->physical.basedir, &r->physical.doc_root);
buffer_copy_path_len2(&r->physical.path,
BUF_PTR_LEN(&r->physical.doc_root),
BUF_PTR_LEN(&r->physical.rel_path));
- if (r->conf.log_request_handling) {
- log_error(r->conf.errh, __FILE__, __LINE__,
- "-- after doc_root");
- log_error(r->conf.errh, __FILE__, __LINE__,
- "Doc-Root : %s", r->physical.doc_root.ptr);
- log_error(r->conf.errh, __FILE__, __LINE__,
- "Rel-Path : %s", r->physical.rel_path.ptr);
- log_error(r->conf.errh, __FILE__, __LINE__,
- "Path : %s", r->physical.path.ptr);
- }
-
rc = plugins_call_handle_physical(r);
if (HANDLER_GO_ON != rc) continue;
@@ -572,13 +512,6 @@ http_response_prepare (request_st * const r)
* Go on and check if the file exists at all
*/
- if (r->conf.log_request_handling) {
- log_error(r->conf.errh, __FILE__, __LINE__,
- "-- handling physical path");
- log_error(r->conf.errh, __FILE__, __LINE__,
- "Path : %s", r->physical.path.ptr);
- }
-
rc = http_response_physical_path_check(r);
if (HANDLER_GO_ON != rc) continue;
@@ -592,7 +525,9 @@ http_response_prepare (request_st * const r)
log_error(r->conf.errh, __FILE__, __LINE__,
"URI : %s", r->uri.path.ptr);
log_error(r->conf.errh, __FILE__, __LINE__,
- "Pathinfo : %s", r->pathinfo.ptr);
+ "Pathinfo : %s", r->pathinfo.ptr
+ ? r->pathinfo.ptr
+ : "");
}
/* call the handlers */