Commit Graph

80 Commits (df61f19daf08de1e7baa88cfb01ec215bc18da10)

Author SHA1 Message Date
Glenn Strauss 81ce160d83 silence warnings from clang ccc-analyzer 7 years ago
Glenn Strauss dd1ae42770 [mod_webdav] fix proppatch mem leak, other fixes (#fixes 1334, #fixes 2000)
x-ref:
  "mod_webdav returns Not Implemented when DELETE fails on permissions error"
  https://redmine.lighttpd.net/issues/1334
  "webdav: Define resourcetype for resources other than collections"
  https://redmine.lighttpd.net/issues/2000
7 years ago
Glenn Strauss af304330e7 [mod_webdav] remove excess SQL param to UNLOCK 7 years ago
Glenn Strauss f69f209e6d [core] option to stream request body to backend (fixes #376)
Set server.stream-request-body = 1 or server.stream-request-body = 2
to have lighttpd connect to backend (CGI, FastCGI, SCGI, proxy)
immediately after parsing request headers, and to stream request body
as it arrives.

default: buffer entire request body before connecting to backend,
in order to avoid tying up (limited) backend resources which are often
implemented using libraries which wait for entire request body before
proceeding.

x-ref:
  "Reimplement upload (POST) handling to match apache/zeus/thttpd/boa functionality"
  https://redmine.lighttpd.net/issues/376
7 years ago
Glenn Strauss 4f6bd42268 [mod_webdav] create file w/ LOCK request if ENOENT
(apply to wider scope)

Also, track creation of Destination to return proper
201 Created or 204 No Content (in order to pass more 'litmus' tests)
7 years ago
Glenn Strauss 34fbc868cf [mod_webdav] getetag and lockdiscovery live props
support getetag and lockdiscovery live properties in propfind requests
7 years ago
Glenn Strauss aee88d6916 [mod_webdav] create file w/ LOCK request if ENOENT
mod_webdav now works with davfs2 mounts on Linux
7 years ago
Glenn Strauss a9568d0ad6 check close() return code after writing to file 7 years ago
Glenn Strauss 80bb42266e [mod_webdav] improve PROPFIND,PROPPATCH (#1818, #1953)
fix "allprop" propfind request to report all 'live' properties
add "supportedlock" 'live' property, if ./configure --with-webdav-locks
report collections (directory) paths with trailing slash ('/') on path
redirect operations on collections without trailing slash ('/') to URI
  with trailing slash ('/')

fix PROPPATCH to work properly and eliminate PROPPATCH memory leak
fix property update after MOVE
move CREATE TABLE statements *before* any prepare statements to avoid
  invalidating the prepare statements when the tables are first created
  **thx Uranus Zhou for the explanation:
    https://zohead.com/archives/lighty-sqlite-err/?lang=en

x-ref:
  "Improve DAV support to be able to handle git as a client"
  https://redmine.lighttpd.net/issues/1953
  "add RFC-compliant LOCK support to mod_webdav"  (still not compliant)
  https://redmine.lighttpd.net/issues/1818

Note: this has not been tested whether or not mod_webdav works with git
The (highly) recommended method to support git via HTTP is to use
git-http-backend via CGI.  gitolite and gitosis provide other good
alternative ways to access git.

This patch does result in more WebDAV 'Litmus' tests passing, even
though mod_webdav still pretends to implement "If" conditional locking,
granting locks to all requestors and not strictly enforcing locks.
7 years ago
Glenn Strauss e0115208ec [mod_webdav] map COPY/MOVE Destination to aliases (fixes #1787)
attempt to remap COPY/MOVE Destination to aliased physical paths
by finding common URI prefix between request URI and Destination
and finding how that part of the request URI was mapped to a
physical path.

This will work if the aliased physical path is above the webdav root.
It is not a good idea to remap physical paths within a webdav root.

Note: webdav paths and webdav properties are managed by mod_webdav,
      so do not modify paths externally or else undefined behavior
      or corruption may occur

x-ref:
  "Bug in mod_webdav when using aliases and MOVE command"
  https://redmine.lighttpd.net/issues/1787
7 years ago
Glenn Strauss 8e3c6bf754 fallback to lseek()/read() if mmap() fails (#fixes 2666)
fallback to lseek()/read() if mmap() fails (#fixes 2666)
e.g. when mmap() is used on lighttpd-controlled temporary files
used POST request body (mod_cgi) and PUT file upload (mod_webdav)

replace use of stream_open() on potentially untrusted files
(protect against SIGBUS if a file is modified while map is read)
Note: stream.[ch] may be removed in a future release
For now, stream.[ch] will read entire file into memory if mmap fails
and so it should only be used on trusted files, e.g. config files.

http_auth basic and digest files are typically small and so buffered
stdio fopen(), fgets(), fclose() will likely be approximately as fast
as mmap.

mod_dirlisting header and readme files are typically small and so
open(), read(), close() will typically be approximately as fast as mmap

mod_ssi will likely be much faster, now buffering SSI page construction
rather than a potentially huge number of file open() calls, one for each
tiny chunk of text between SSI directives.

mod_webdav COPY and MOVE may be slower due to removal of mmap, but are
now more resilient to partial writes.

x-ref:
  "handle filesystems without mmap() support"
  https://redmine.lighttpd.net/issues/2666
  "WebDAV upload-> mmap failed: operation not permitted"
  https://redmine.lighttpd.net/issues/962
  "Lighttpd 1.4.20 Crash (SIGBUS in mod_compress)"
  https://redmine.lighttpd.net/issues/1879
  "Crash SIGBUS"
  https://redmine.lighttpd.net/issues/2391

github: closes #57
7 years ago
Glenn Strauss 3b6fd58fd9 [mod_webdav] lseek,read if fs can not mmap (#2666, fixes #962)
For uploaded files or other request body, fall back to
lseek(),read() if filesystem does not support mmap()

(mmap(), if supported, is utilized regardless of --enable-mmap
 since request body is either in memory or stored in temporary
 files controlled by lighttpd)

x-ref:
  "WebDAV upload-> mmap failed: operation not permitted"
  https://redmine.lighttpd.net/issues/962
  "handle filesystems without mmap() support"
  https://redmine.lighttpd.net/issues/2666

github: closes #55
7 years ago
Glenn Strauss 8f27ff8cd4 defer reading request body until handle subrequest
read request body in dynamic handlers supporting request body
(mod_cgi, mod_fastcgi, mod_proxy, mod_scgi, mod_webdav)

(In the future, each dynamic handler might choose whether or not to
 buffer request body or to stream request body to backend as request
 body is received.)

modify mod_webdav to mark request in handle_physical hook, and move
the main logic to handle_subrequest hook, where the main logic is
for other dynamic handlers.
7 years ago
Glenn Strauss f4cb07f723 [mod_webdav] readdir POSIX compat (fixes #1826)
do not expect '.' to be part of dir listing

x-ref:
  "mod_webdav readdir POSIX compatibility issue"
  https://redmine.lighttpd.net/issues/1826
7 years ago
Glenn Strauss ab829cee5e [mod_webdav] allow Depth: Infinity lock on file (fixes #2296)
(still not supporting Depth: Infinity on directories)

patch by mstorsjo submitted as part of feature request #1953

From: Glenn Strauss <gstrauss@gluelogic.com>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@3133 152afb58-edef-0310-8abb-c4023f1b3aa9
7 years ago
Glenn Strauss f5453290b7 validate return values from strtol, strtoul (fixes #2564)
From: Glenn Strauss <gstrauss@gluelogic.com>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@3122 152afb58-edef-0310-8abb-c4023f1b3aa9
7 years ago
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
7 years ago
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
7 years ago
Stefan Bühler 26226271de maintain cq->bytes_in in chunk API; keep bytes_out/bytes_in synced
From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@3016 152afb58-edef-0310-8abb-c4023f1b3aa9
8 years ago
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
8 years ago
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
8 years ago
Stefan Bühler 1be163b44a Remove chunkqueue_get_{append,prepend}* API
Although those were "easy" to use, they violated the abstraction:
  content of the chunkqueue should only be modified via the API.
  Replace with chunkqueue_get_memory() and chunkqueue_use_memory() for
  functions that read data from network (reusing large buffers),
  chunkqueue_steal_with_tempfiles() to store request bodies on disk
  temporarily.
  Modules that were generating content and need a buffer maintain the
  buffer manually (have to be careful to free the buffer on errors, as
  it isn't part of the chunkqueue yet).

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

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2976 152afb58-edef-0310-8abb-c4023f1b3aa9
8 years ago
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
8 years ago
Stefan Bühler 8e31e18b8e [mod_webdav] fix logic error in handling file creation error
From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2955 152afb58-edef-0310-8abb-c4023f1b3aa9
9 years ago
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
9 years ago
Stefan Bühler 24994e113a [mod_webdav] fix fd leak found with parfait (fixes #2530, thx kukackajiri)
From: Stefan Bühler <stbuehler@web.de>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2930 152afb58-edef-0310-8abb-c4023f1b3aa9
9 years ago
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
10 years ago
Cyril Brulebois 9c43331382 Use NULL instead of 0 where pointers are expected.
There are 6 remaining occurrences after this commit, in mod_compress,
due to zlib's Z_NULL being defined as 0 instead of NULL.

Signed-off-by: Cyril Brulebois <kibi@debian.org>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2845 152afb58-edef-0310-8abb-c4023f1b3aa9
11 years ago
Cyril Brulebois f4ba2d4f24 Mark some data as static.
Those identifiers aren't used except in the files they're declared in,
so mark them static.

Signed-off-by: Cyril Brulebois <kibi@debian.org>

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2842 152afb58-edef-0310-8abb-c4023f1b3aa9
11 years ago
Stefan Bühler e087d5bf1e fix mod_webdav crash from #1793 (fixes #2048, thx hiroya)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2665 152afb58-edef-0310-8abb-c4023f1b3aa9
14 years ago
Stefan Bühler a55f82a392 mod_webdav: Delete old properties before updating new for MOVE (fixes #1317)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2630 152afb58-edef-0310-8abb-c4023f1b3aa9
14 years ago
Stefan Bühler cef23f08d3 mod_webdav: Patch to skip login information for domain part of Destination field (fixes #1793)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2629 152afb58-edef-0310-8abb-c4023f1b3aa9
14 years ago
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
14 years ago
Stefan Bühler 243f756e92 Fix unused function webdav_lockdiscovery in mod_webdav
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2573 152afb58-edef-0310-8abb-c4023f1b3aa9
14 years ago
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
14 years ago
Stefan Bühler a6218765c2 Fix some problems with more strict compilers (#1923)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2408 152afb58-edef-0310-8abb-c4023f1b3aa9
14 years ago
Stefan Bühler 21c5377d3f Use FD_CLOEXEC if possible (fixes #1821)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2363 152afb58-edef-0310-8abb-c4023f1b3aa9
15 years ago
Stefan Bühler 52861d77df Replace buffer_{append,copy}_string with the _len variant where possible (#1732, thx crypt)
Replace BUFFER_{APPEND,COPY}_STRING_CONST with _len(b, CONST_STRL_LEN(x))


git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2250 152afb58-edef-0310-8abb-c4023f1b3aa9
15 years ago
Stefan Bühler 193b933329 Fix type in previous commit
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2166 152afb58-edef-0310-8abb-c4023f1b3aa9
15 years ago
Stefan Bühler e93cb224c1 Fix more warnings (unused var, pointer types in md5.c)
- Use const void* in instead of unsigned char* in MD5_Update
   (same as in the openssl api, to avoid signed/unsigned char* warnings)
 - Add const to some pointers in md5.c


git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2165 152afb58-edef-0310-8abb-c4023f1b3aa9
15 years ago
Stefan Bühler 5a9992b106 Fixed many warnings (compare (un)signed, unused vars, and initialize with zero)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2160 152afb58-edef-0310-8abb-c4023f1b3aa9
15 years ago
Jan Kneschke 8f9f532083 * fixed crash on 32bit archs when debug-msgs are printed in mod_scgi,
mod_fastcgi and mod_webdav (#1263)



git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@1882 152afb58-edef-0310-8abb-c4023f1b3aa9
16 years ago
Jan Kneschke bdc811e2ec fixed compilation on c89 compilers
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@1743 152afb58-edef-0310-8abb-c4023f1b3aa9
16 years ago
Marcus Rückert b6ee10916c mkcol/mkdir in mod_webdav now honors the umask aswell.
fixes [#884]

* src/mod_webdav.c
  added define WEBDAV_FILE_MODE
  added define WEBDAV_DIR_MODE
  and replaced all hardcoded values in open/mkdir calls with
  the defines.


git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@1379 152afb58-edef-0310-8abb-c4023f1b3aa9
17 years ago
Jan Kneschke bb24041f92 provide a useful error-msg when sqlite3_open fails
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@1373 152afb58-edef-0310-8abb-c4023f1b3aa9
17 years ago
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
17 years ago
Marcus Rückert b060b46dc9 - mark a few params as unused
- fix a few signed mismatch by casting to the correct type

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@1363 152afb58-edef-0310-8abb-c4023f1b3aa9
17 years ago
Jan Kneschke 0ad43990ee added a better comment about the current (incomplete) state of LOCK support
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1346 152afb58-edef-0310-8abb-c4023f1b3aa9
17 years ago
Marcus Rückert 347f6479c2 - configure.in:
check for uuid/uuid.h
- mod_webdav.c:
  change the conditional to use HAVE_UUID_UUID_h

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1343 152afb58-edef-0310-8abb-c4023f1b3aa9
17 years ago
Jan Kneschke 15a488a945 use the right return-value for an error
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1339 152afb58-edef-0310-8abb-c4023f1b3aa9
17 years ago