Commit Graph

46 Commits

Author SHA1 Message Date
Glenn Strauss b473220d69 set REDIRECT_URI in mod_rewrite, mod_magnet
set REDIRECT_URI in mod_rewrite, mod_magnet if request URI is modified
to differ from the original request URI.
2016-04-25 01:02:08 -04:00
Glenn Strauss dbdab5dbc9 [core] server.error-handler new directive for error pages (fixes #2702)
server.error-handler preserves HTTP status error code when error page
is static, and allows dynamic handlers to change HTTP status code
when error page is provided by dynamic handler.  server.error-handler
intercepts all HTTP status codes >= 400 except when the content is
generated by a dynamic handler (cgi, ssi, fastcgi, scgi, proxy, lua).
The request method is unconditionally changed to GET for the request
to service the error handler, and the original request method is
later restored (for logging purposes).  request body from the
original request, if present, is discarded.

server.error-handler is somewhat similar to server.error-handler-404,
but server.error-handler-404 is now deprecated, intercepts only 404
and 403 HTTP status codes, and returns 200 OK for static error pages,
a source of confusion for some admins.  On the other hand, the new
server.error-handler, when set, will intercept all HTTP status error
codes >= 400.  server.error-handler takes precedence over
server.error-handler-404 when both are set.

NOTE: a major difference between server.error-handler and the
now-deprecated server.error-handler-404 is that the values of the
non-standard CGI environment variables REQUEST_URI and REDIRECT_URI
have been swapped.  Since REDIRECT_STATUS is the original HTTP
status code, REDIRECT_URI is now the original request, and REQUEST_URI
is the current request (e.g. the URI/URL to the error handler).
The prior behavior -- which reversed REQUEST_URI and REDIRECT_URI values
from those described above -- is preserved for server.error-handler-404.

Additionally, REDIRECT_STATUS is now available to mod_magnet, which
continues to have access to request.uri and request.orig_uri.

See further discussion at https://redmine.lighttpd.net/issues/2702
and https://redmine.lighttpd.net/issues/1828

github: closes #36
2016-04-25 01:01:08 -04:00
Glenn Strauss a65c57a548 [core] open fd when appending file to cq (fixes #2655)
http_chunk_append_file() opens fd when appending file to chunkqueue.
Defers calculation of content length until response is finished.

This reduces race conditions pertaining to stat() and then (later)
open(), when the result of the stat() was used for Content-Length
or to generate chunked headers.

Note: this does not change how lighttpd handles files that are modified
in-place by another process after having been opened by lighttpd --
don't do that.  This *does* improve handling of files that are
frequently modified via a temporary file and then atomically renamed
into place.

mod_fastcgi has been modified to use http_chunk_append_file_range() with
X-Sendfile2 and will open the target file multiple times if there are
multiple ranges.

Note: (future todo) not implemented for chunk.[ch] interfaces used by
range requests in mod_staticfile or by mod_ssi.  Those uses could lead
to too many open fds.  For mod_staticfile, limits should be put in place
for max number of ranges accepted by mod_staticfile.  For mod_ssi,
limits would need to be placed on the maximum number of includes, and
the primary SSI file split across lots of SSI directives should either
copy the pieces or perhaps chunk.h could be extended to allow for an
open fd to be shared across multiple chunks.  Doing either of these
would improve the performance of SSI since they would replace many file
opens on the pieces of the SSI file around the SSI directives.

x-ref:
  "Serving a file that is getting updated can cause an empty response or incorrect content-length error"
  https://redmine.lighttpd.net/issues/2655

github:
Closes #49
2016-04-18 04:27:08 -04:00
Glenn Strauss 659ce5e78e [mod_magnet] rename var for clarity (fixes #1483)
"length" argument is more accurately described as 0-index end of range

x-ref:
  "magnet offset > length bug"
  https://redmine.lighttpd.net/issues/1483
2016-04-13 00:07:26 -04:00
Glenn Strauss 8abd06a7ff consistent inclusion of config.h at top of files (fixes #2073)
From: Glenn Strauss <gstrauss@gluelogic.com>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@3113 152afb58-edef-0310-8abb-c4023f1b3aa9
2016-03-19 15:14:35 +00:00
Stefan Bühler 82ee3fb2f8 [mod_magnet] define lua_pushglobaltable (for lua5.1) and use it (fixes #2719)
From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@3106 152afb58-edef-0310-8abb-c4023f1b3aa9
2016-03-19 13:16:31 +00:00
Stefan Bühler c354229f42 add handling for lua 5.2 and 5.3 (fixes #2674)
Reviewers: stbuehler

Differential Revision: https://review.lighttpd.net/D4

From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@3070 152afb58-edef-0310-8abb-c4023f1b3aa9
2016-01-03 14:48:09 +00:00
Stefan Bühler c512345fa2 [config] check config option scope; warn if server option is given in conditional
From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@3049 152afb58-edef-0310-8abb-c4023f1b3aa9
2015-11-07 12:51:11 +00:00
Stefan Bühler b66fa2cb68 [plugins] when modules are linked statically still only load the modules given in the config
- previously it would load all modules in some fixed order
- also warn when mod_magnet or mod_trigger_b4_dl are compiled without
  needed dependencies
- mod_trigger_b4_dl fails in plugin_init when dependencies are missing

From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@3029 152afb58-edef-0310-8abb-c4023f1b3aa9
2015-08-29 09:28:01 +00:00
Stefan Bühler c5737093db [mod_magnet] fix segfault when accessing not existing lighty.req_env[] entry (found by coverity)
From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2998 152afb58-edef-0310-8abb-c4023f1b3aa9
2015-07-05 22:00:14 +00:00
Stefan Bühler 33cebeb0f7 fix segfaults in many plugins if they failed configuration
From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2988 152afb58-edef-0310-8abb-c4023f1b3aa9
2015-05-14 09:38:33 +00:00
Stefan Bühler ad3e93ea96 Use buffer API to read and modify "used" member
- a lot of code tried to handle manually adding terminating zeroes and
  keeping track of the correct "used" count.
  Replaced all "external" usages with simple wrapper functions:
  * buffer_string_is_empty (used <= 1), buffer_is_empty (used == 0);
    prefer buffer_string_is_empty
  * buffer_string_set_length
  * buffer_string_length
  * CONST_BUF_LEN() macro
- removed "static" buffer hacks (buffers pointing to constant/stack
  memory instead of malloc()ed data)
- buffer_append_strftime(): refactor buffer+strftime uses
- li_tohex(): no need for a buffer for binary-to-hex conversion:
  the output data length is easy to predict
- remove "-Winline" from extra warnings: the "inline" keyword just
  supresses the warning about unused but defined (static) functions;
  don't care whether it actually gets inlined or not.

From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2979 152afb58-edef-0310-8abb-c4023f1b3aa9
2015-02-08 19:10:44 +00:00
Stefan Bühler 6afad87d2e fix buffer, chunk and http_chunk API
* remove unused structs and functions
    (buffer_array, read_buffer)
  * change return type from int to void for many functions,
    as the return value (indicating error/success) was never checked,
    and the function would only fail on programming errors and not on
    invalid input; changed functions to use force_assert instead of
    returning an error.
  * all "len" parameters now are the real size of the memory to be read.
    the length of strings is given always without the terminating 0.
  * the "buffer" struct still counts the terminating 0 in ->used,
    provide buffer_string_length() to get the length of a string in a
    buffer.
    unset config "strings" have used == 0, which is used in some places
    to distinguish unset values from "" (empty string) values.
  * most buffer usages should now use it as string container.
  * optimise some buffer copying by "moving" data to other buffers
  * use (u)intmax_t for generic int-to-string functions
  * remove unused enum values: UNUSED_CHUNK, ENCODING_UNSET
  * converted BUFFER_APPEND_SLASH to inline function (no macro feature
    needed)
  * refactor: create chunkqueue_steal: moving (partial) chunks into another
    queue
  * http_chunk: added separate function to terminate chunked body instead of
    magic handling in http_chunk_append_mem().
    http_chunk_append_* now handle empty chunks, and never terminate the
    chunked body.

From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2975 152afb58-edef-0310-8abb-c4023f1b3aa9
2015-02-08 12:37:10 +00:00
Stefan Bühler 8f0e19738f fix r2943 (added invalid read after free)
From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2949 152afb58-edef-0310-8abb-c4023f1b3aa9
2014-02-16 13:08:22 +00:00
Stefan Bühler 07dd0bd0a5 add force_assert() to enforce assertions as simple assert()s are disabled by -DNDEBUG (fixes #2546)
From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2948 152afb58-edef-0310-8abb-c4023f1b3aa9
2014-02-16 13:08:20 +00:00
Stefan Bühler b239e7734a [mod_magnet] fix memory leak
From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2943 152afb58-edef-0310-8abb-c4023f1b3aa9
2014-02-14 21:06:10 +00:00
Stefan Bühler 17762fad01 maintain physical.basedir (the "acting" doc-root as prefix of physical.path) in more places
From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2926 152afb58-edef-0310-8abb-c4023f1b3aa9
2014-01-10 12:04:57 +00:00
Stefan Bühler 6f208cfde1 fix/silence bugs reported by ccc-analyzer (clang)
These should all be non critical:
 * memory leaks on startup in error cases (which lead to
   immediate shutdowns anyway)
 * http_auth/ldap: passing uninitialized "ret" to ldap_err2string
 * sizeof(T) not matching the target pointer in malloc/calloc calls;
   those cases were either:
   * T being the wrong pointer type - shouldn't matter as long as all
     pointers have same size
   * T being larger than the type needed
 * mod_accesslog: direct use after free in cleanup (server shutdown);
   could crash before "clean" shutdown
 * some false positives (mod_compress, mod_expire)
 * assert(srv->config_context->used > 0); - this is always the case,
   as there is always a global config block

From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2920 152afb58-edef-0310-8abb-c4023f1b3aa9
2013-11-13 11:43:26 +00:00
Stefan Bühler f5f6b954b0 mod_magnet: add traceback for printing lua errors
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2681 152afb58-edef-0310-8abb-c4023f1b3aa9
2009-10-26 14:16:20 +00:00
Stefan Bühler 07ae3fb815 mod_magnet: fix pairs() for normal tables and strings (fixes #1307)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2680 152afb58-edef-0310-8abb-c4023f1b3aa9
2009-10-26 14:16:15 +00:00
Stefan Bühler 915a9e3e88 Add some iterators for mod_magnet (fixes #1307)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2644 152afb58-edef-0310-8abb-c4023f1b3aa9
2009-10-12 19:49:43 +00:00
Stefan Bühler 22e8b456a9 Fix header inclusion order, always include "config.h" before any system header
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2624 152afb58-edef-0310-8abb-c4023f1b3aa9
2009-10-11 14:31:42 +00:00
Stefan Bühler 4df22f2a32 Fix issues found with clang analyzer
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2594 152afb58-edef-0310-8abb-c4023f1b3aa9
2009-07-21 20:35:27 +00:00
Stefan Bühler 4f4d40f3f7 Add "lighty.req_env" table to mod_magnet for setting/getting environment values for cgi (fixes #1967, thx presbrey)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2515 152afb58-edef-0310-8abb-c4023f1b3aa9
2009-06-10 13:08:15 +00:00
Stefan Bühler c21623456c mod_magnet: Add env["request.path-info"]
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2474 152afb58-edef-0310-8abb-c4023f1b3aa9
2009-04-15 22:33:36 +00:00
Stefan Bühler 1ff333cb4a mod_magnet: Add env["request.remote-ip"] (fixes #1740)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2473 152afb58-edef-0310-8abb-c4023f1b3aa9
2009-04-15 22:33:34 +00:00
Stefan Bühler 63f785a2f8 Added some extra warning options in cmake and fix the resulting warnings (unused/static functions)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2414 152afb58-edef-0310-8abb-c4023f1b3aa9
2009-03-07 21:05:37 +00:00
Stefan Bühler ad12e4c5b2 Insert many con->mode checks; they should prevent two modules to handle the same request if they shouldn't (#631)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2271 152afb58-edef-0310-8abb-c4023f1b3aa9
2008-08-01 16:13:34 +00:00
Stefan Bühler f08cd32877 Close connection in mod_magnet if returned status code
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2201 152afb58-edef-0310-8abb-c4023f1b3aa9
2008-07-20 17:55:14 +00:00
Stefan Bühler 73189c64e7 Fix mod_magnet to set con->mode = p->id if it generates content, so returning 4xx/5xx doesn't append an error page
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2155 152afb58-edef-0310-8abb-c4023f1b3aa9
2008-04-23 19:27:12 +00:00
Stefan Bühler 80be71bd43 Fix mod_magnet: enable "request.method" and "request.protocol" in lighty.env (#1308)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2137 152afb58-edef-0310-8abb-c4023f1b3aa9
2008-03-26 13:51:33 +00:00
Jan Kneschke e49da67a47 only set the etag if we have one
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@1380 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-10-07 07:46:22 +00:00
Jan Kneschke 41bcf415c4 added content-type to the .stat() and decoded the st_mode
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@1378 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-10-06 11:21:00 +00:00
Jan Kneschke bf0f7832c1 added lighty.stat() which uses the stat-cache to reduce the number of syscalls
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@1377 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-10-06 08:27:50 +00:00
Jan Kneschke 0780de8bfa added the original URI, before the rewrite, to the env.
the orig-uri is forwarded as REQUEST_URI to the *CGI backends


git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@1376 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-10-06 07:14:10 +00:00
Marcus Rückert 8cd1471cb3 - white space cleanup part 2 this time 1.4 ;)
i hope it helps with merging stuff back to 1.5

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@1371 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-10-04 13:26:23 +00:00
Marcus Rückert 3e7e2d528d - marked parameter as unused
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@1359 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-10-03 22:16:35 +00:00
Jan Kneschke 634ec365f5 make the config-options arrays instead of strings
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1338 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-09-23 11:19:31 +00:00
Jan Kneschke a34a3ae173 reverted [1312] as it led to seg-faults
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1319 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-09-20 14:40:28 +00:00
Jan Kneschke 2a3ac19883 rici pointed me the lua_cpcall() to call a lua-c-function in protected mode
instead of used lua_atpanic to handle errors myself



git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1312 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-09-16 11:29:48 +00:00
Jan Kneschke e931d4f27f fixed compile if lua is not enabled
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1300 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-09-15 11:49:57 +00:00
Jan Kneschke 63ec609a56 - added set() for .env[]
- added .RESTART_REQUEST
- fixed handling of .content = { { ... } } if offset is set, but no length
- added range checks for offset and length



git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1299 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-09-15 10:00:46 +00:00
Jan Kneschke c7b9858b03 added support for lighty.status[] in mod_magnet
- moved the status_counter_* functions from mod_fastcgi.c to status_counter.[ch]


git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1298 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-09-14 12:00:32 +00:00
Jan Kneschke b79f1a24c9 - moved all global vars to the lighty.* namespace
- added lighty.env[] to get read access to uri.path, physical.path and friends


git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1295 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-09-13 13:13:27 +00:00
Jan Kneschke 925cb27a14 - add a try-catch around add-content
- make the content-array simpler
- make request[] a porxy to the con->request array in c



git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1293 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-09-11 20:37:29 +00:00
Jan Kneschke daeab348cd added mod_magnet
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1292 152afb58-edef-0310-8abb-c4023f1b3aa9
2006-09-10 22:01:43 +00:00