|
|
|
@ -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 */
|
|
|
|
|