Commit Graph

388 Commits

Author SHA1 Message Date
Tom Dryer
667edacaa3
Fix hung connection from consecutive requests (#7)
A client making quick consecutive requests with keep-alive, such as `ab`
with `-k`, can cause the connection to become hung.

This happens because of an optimization in `http_poll` function. When a
connection state becomes `DONE`, `httpd_poll` recycles the connection
and immediately calls `poll_recv_request`. However, it doesn't handle
this resulting in the connection state becoming `DONE` again. If this
occurs, the state stays in `DONE`, and the further calls to `httpd_poll`
ignore the connection.

Fix this by calling `poll_recv_request` in a loop until the state is no
longer `DONE`.

* Enable TCP_NODELAY optimization

It looks like `TCP_NODELAY` was disabled due to the bug fixed in the
previous commit. Enabling it substantially improves keep-alive
performance with `ab`:

Before:

```
Time per request:       0.272 [ms] (mean)
```

After:

```
Time per request:       0.033 [ms] (mean)
```

* Remove keep-alive optimization from `httpd_poll`

Benchmarking with `ab` shows that bypassing `select` for keep-alive
connections in the `DONE` state doesn't significantly impact
performance. Since this optimization previously caused a bug, remove it.
2021-06-14 11:44:55 +10:00
Solt Budavári
5c0f9babf1
Properly divide list "headers" and lists. (#4)
Since the feature (and security and limitations) list follows the
"Features:" (etc.) line without any empty lines between them,
some Markdown-to-HTML converters (correctly) assume that
they are one paragraph, which causes the list not to
be converted to an actual HTML list. By putting an empty line
between the actual lists and their preceding lines,
the lists will be correctly converted.

(Both lists and paragraphs are block elements,
and they should be "marked down" accordingly.
See https://daringfireball.net/projects/markdown/syntax#block .)
2021-04-08 11:32:56 +10:00
Miles Elam
35c488b95f
Dockerize (#3)
Add static build option to Makefile and create Dockerfile to run it.
2021-04-03 18:08:52 +11:00
Emil Mikulic
9222bbc9d8 Improve make_safe_uri coverage. 2021-03-21 15:31:04 +11:00
Emil Mikulic
f3acb93b93 fuzz_llvm_make_safe_uri: get code from darkhttpd.c 2021-03-21 15:13:44 +11:00
Emil Mikulic
02b9908f71 Retire old developer scripts. 2021-03-21 15:06:57 +11:00
Emil Mikulic
81b491e60a Declare vars outside of for() loop for -std=c90.
Fixes #2.
2021-03-21 15:03:14 +11:00
Emil Mikulic
d576efc9d8 warns: build with -std=c90. 2021-03-21 15:01:17 +11:00
Emil Mikulic
f05413f8df Not using release script anymore, retire it. 2021-02-21 17:20:49 +11:00
Emil Mikulic
505223a9e5 Clean up after fuzzers. 2021-02-21 17:10:18 +11:00
Emil Mikulic
dc0fd7ecdc Don't include URL or method in default_reply. 2021-02-21 17:09:27 +11:00
Emil Mikulic
3058f910d9 File listings: decoded URL in title and heading.
Also HTML-escape title, heading, and file names.
2021-02-21 16:47:14 +11:00
ilmich
2b37151afc Add support for logging with syslog.
The motivation is that with busybox, the implementation of syslog has a
builtin log rotation.

So I don't need an external logrotate for darkhttpd.
2021-02-10 18:51:24 +11:00
Emil Mikulic
f72e8d6afe Bump version past release. 2021-02-10 18:48:57 +11:00
Emil Mikulic
afeb47443a [ darkhttpd 1.13 release ]
And bump copyright year.
2021-01-18 00:50:36 +11:00
Emil Mikulic
1845a4aa93 Update readme: add introduction, markdown. 2021-01-18 00:44:28 +11:00
Emil Mikulic
fdf28d2ede Rename README. 2021-01-18 00:34:04 +11:00
Emil Mikulic
dd49204609 Add a fuzzer that runs the server in the background. 2021-01-18 00:25:02 +11:00
Emil Mikulic
8cca3b6c87 Fix a bug when a range is requested and the request is too large. 2021-01-17 23:00:32 +11:00
Emil Mikulic
c1cd3d0e2d Fix bug in handling of bad requests. 2021-01-17 22:11:54 +11:00
Emil Mikulic
b57eb17d47 More Python 3 updates. 2021-01-17 17:29:23 +11:00
Emil Mikulic
d39cc3849a test_auth: Add test for wrong auth. 2021-01-17 16:55:09 +11:00
Emil Mikulic
7e60a9b731 test_auth.py: Update to Python 3. 2021-01-17 16:52:47 +11:00
Emil Mikulic
3f236fd71b test.py: close sockets, more Python 3 cleanups. 2021-01-17 16:36:26 +11:00
Emil Mikulic
67c506b620 Convert test.py to Python 3.
Unicode was a mistake.
2021-01-17 16:29:41 +11:00
decho
1990aee864 directory listing: Send viewport meta tag 2021-01-05 19:31:16 +11:00
Emil Mikulic
6a82e67772 Avoid file size overflow on 32-bit systems.
Reported by: Mariusz Stokłosa <krokator@gmail.com>
2020-07-01 22:07:12 +10:00
solsTiCe d'Hiver
d777aacd98 Log using Combined Log Format (commonly found in apache log)
Commonly found in Apache log. It adds 2 fields upon the Common Log
Format (referer and user-agent).

https://en.wikipedia.org/wiki/Common_Log_Format

It is just a matter of reordering what your were already logging with a
new date formatting.

* We are cheating because we always assume HTTP/1.1 as the request
  header.

* We assume the user name is unknown.
2020-07-01 21:47:26 +10:00
Andreas Gal
85609c8095 add mp4 mine type 2020-07-01 21:36:04 +10:00
Christian Hesse
3a582f3c57 Honour LDFLAGS.
Signed-off-by: Christian Hesse <mail@eworm.de>
2020-07-01 21:34:23 +10:00
Teo Klestrup Röijezon
07af05745e Add SVG mime type. 2020-07-01 21:29:25 +10:00
Emil Mikulic
e9c474dfac Don't send extra blank line when --auth is disabled. 2020-07-01 21:22:17 +10:00
Emil Mikulic
598a47fe9d Add tests for --auth. 2020-07-01 21:22:17 +10:00
Ryan Jacobs
027b0c90e5 Add basic-auth support. 2020-07-01 20:48:02 +10:00
Emil Mikulic
47ba3fd7c7 -fno-omit-frame-pointer to get full backtraces in asan build. 2020-07-01 20:46:10 +10:00
Emil Mikulic
36ab416f73 Enable leak sanitizer. 2020-07-01 20:43:49 +10:00
Emil Mikulic
f41be73a66 Silence -Wparentheses warning. 2020-07-01 20:15:36 +10:00
Emil Mikulic
6c7fb762ac Adjust test: make_safe_uri no longer strips query params. 2020-07-01 20:15:03 +10:00
Mathieu Gagnon
e09f869072 Fix handling of files with question mark in the name. 2020-07-01 20:15:03 +10:00
Emil Mikulic
5fc747a64e Add tests for fetching a file with a question mark in its name. 2020-07-01 20:15:03 +10:00
Emil Mikulic
36aadb6f90 Tweak macros to avoid extraneous semicolons.
-Wextra-semi-stmt complains about this.
2020-07-01 19:43:30 +10:00
Emil Mikulic
9274bfbfe9 clang-warns: use clang in path by default. 2020-07-01 19:41:46 +10:00
Emil Mikulic
27e489aab7 Memory sanitizer workaround: unpoison fd_sets.
This is necessary with clang-9, maybe earlier.
2020-07-01 19:18:13 +10:00
Luca Weiss
e2e693e1cf Add application/wasm mimetype
Useful for serving wasm files.

See https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle#configure-wasm-mime-type
2020-07-01 19:01:32 +10:00
Emil Mikulic
cbbaba25fb Add benchmark. 2018-12-11 00:42:52 +11:00
Emil Mikulic
ba63a6d60f Add test for --timeout. 2018-12-10 23:52:42 +11:00
Emil Mikulic
f0a8dc6c6c Add --timeout cmdline option. 2018-12-10 23:35:31 +11:00
Emil Mikulic
8207cf6b0f run-tests: try to use the default gcc and clang. 2018-12-10 23:35:31 +11:00
Emil Mikulic
6e8abe2324 run-tests: don't mix msan with ubsan.
ubsan seems to be causing false positives for msan.
We already try ubsan together with asan.
2018-12-10 23:34:56 +11:00
Emil Mikulic
7d0fc1d9f9 Clean more. 2018-12-10 23:34:34 +11:00