Commit Graph

101 Commits

Author SHA1 Message Date
Emil Mikulic
020b4d20e2 Fix whitespace and disclaimer comment. 2013-04-28 19:44:12 +10:00
Emil Mikulic
84e59c72ac Use FALLTHROUGH instead of goto. 2013-04-28 19:44:12 +10:00
Emil Mikulic
1623dee16a Initial revision - this and the source are the only files in the 1.0
tarball.
2013-04-28 19:44:12 +10:00
Emil Mikulic
6ab21a586e . Don't expect user to define NDEBUG. 2013-04-28 19:44:12 +10:00
Emil Mikulic
761462e4e5 . __sun__ -> __sun since Sun's CC doesn't use the former. 2013-04-28 19:44:12 +10:00
Emil Mikulic
7df4b55839 . Fix chomp()'s checking of empty strings. 2013-04-28 19:44:12 +10:00
Emil Mikulic
c58880c10a . Added third BSD clause.
. Got rid of Solaris hint - it belongs in the README.
. Got rid of a tab.
2013-04-28 19:44:12 +10:00
Emil Mikulic
b175db347d . Added --accf instead of compile-time NO_ACCEPTFILTER.
. Fixed const issues in dlent_cmp().
. Fixed uninitialized from/to warning.
2013-04-28 19:44:12 +10:00
Emil Mikulic
36f027c8c8 Fix two memory leaks. 2013-04-28 19:44:12 +10:00
Emil Mikulic
a4be99dc3f . USE_ACCEPTFILTER -> NO_ACCEPTFILTER and document it. 2013-04-28 19:44:11 +10:00
Emil Mikulic
a0dddaf19a . Add USE_ACCEPTFILTER knob.
. debugf() sweep - turn non-verbose ones into printf()s
2013-04-28 19:44:11 +10:00
Emil Mikulic
3f6c57ca70 -DNDEBUG 2013-04-28 19:44:11 +10:00
Emil Mikulic
a4347fa196 . Added BSD license.
. Version is now 1.0.
. Display [!]NDEBUG in --version output.
2013-04-28 19:44:11 +10:00
Emil Mikulic
01f231eaea . -O won't hurt, and it catches uninitialized vars. 2013-04-28 19:44:11 +10:00
Emil Mikulic
3e378caaf0 . Implemented apbuf API.
. Reworked generate_dir_listing() to use apbuf - much nicer now.
2013-04-28 19:44:11 +10:00
Emil Mikulic
2776f8c35e . Cosmetics in mime_mapping_cmp().
. Added make_sorted_dirlist(), cleanup_sorted_dirlist().
. generate_dir_listing() works better and produces sorted output, but
  still looks awful.
2013-04-28 19:44:11 +10:00
Emil Mikulic
3dbf2f15b4 . Got rid of pretty top-of-file.
. Moved $Id$ into static rcsid[].
. Preened TODO list.
. Removed LIST_EMPTY() - it wasn't being used.
. Got rid of "mapping x -> y" debugf.
. Move exit() out of usage() and into caller to make program flow more
  obvious.
. Added --version handling that prints rcsid.
2013-04-28 19:44:11 +10:00
Emil Mikulic
fb2e40cae5 . Added file_exists().
. Added skeleton for generate_dir_listing().
. Tied it into process_get().
2013-04-28 19:44:11 +10:00
Emil Mikulic
917e7a2cc4 . De-constify offset for Linux. 2013-04-28 19:44:11 +10:00
Emil Mikulic
132757b8fe . Do a non-blocking open and only stat once. 2013-04-28 19:44:11 +10:00
Emil Mikulic
7abf59ea32 . Removed test_make_safe_uri(). 2013-04-28 19:44:11 +10:00
Emil Mikulic
19f70a46a9 . Added xclose().
. Changed reply_file from FILE to a file descriptor - using regular
  syscalls instead of stdio f* calls.
2013-04-28 19:44:11 +10:00
Emil Mikulic
6312e230fb . Implement chroot. 2013-04-28 19:44:11 +10:00
Emil Mikulic
45ac8883e0 . Correct order of checking name and id for --uid and --gid. 2013-04-28 19:44:11 +10:00
Emil Mikulic
7ef872fd6a Added handling of --uid. 2013-04-28 19:44:11 +10:00
Emil Mikulic
b5f0992e7e . Added str_to_num().
. Added handling of --uid.
2013-04-28 19:44:11 +10:00
Emil Mikulic
b2b6d75a05 . In NDEBUG, safefree() is just free().
. Originally there were three places where a pointer was NULL'd after
  being freed.  One of these is actually important, so annotate it.
2013-04-28 19:44:11 +10:00
Emil Mikulic
7014380256 Cosmetics. 2013-04-28 19:44:11 +10:00
Emil Mikulic
850543f7d6 . Patch up a leak by freeing target when needed. 2013-04-28 19:44:11 +10:00
Emil Mikulic
832851b83d . Add safefree(x) macro to set x to NULL after freeing. 2013-04-28 19:44:11 +10:00
Emil Mikulic
e74bb5a077 . Added redirect().
. Moved 404 reply up to stat() section.
. Redirect /dir to /dir/
. Separate permissions (403 Forbidden) from other fopen() failures
  (500 Internal Server Error)
2013-04-28 19:44:11 +10:00
Emil Mikulic
eee798c571 . stat() the file before opening it to avoid opening FIFOs, sockets, etc. 2013-04-28 19:44:11 +10:00
Emil Mikulic
db6517c62d . Use goto instead of code duplication. 2013-04-28 19:44:11 +10:00
Emil Mikulic
5563889b66 Make keep_alive() a macro instead of a tiny function. 2013-04-28 19:44:11 +10:00
Emil Mikulic
df4f6910de send_from_file(): Use sendfile() on Linux. 2013-04-28 19:44:11 +10:00
Emil Mikulic
8f4a5e6b60 . Split file sending into send_from_file().
. Optimize it with sendfile() on FreeBSD.
2013-04-28 19:44:11 +10:00
Emil Mikulic
e127c6acda make_safe_uri() improvements.
. Strip out debugging.
. Fix (elements == 0) returning an empty string.
2013-04-28 19:44:11 +10:00
Emil Mikulic
b082fa213f Faster, simpler, not yet completely correct reimplementation of
make_safe_uri().  It still has a lot of debugging cruft inside.
2013-04-28 19:44:11 +10:00
Emil Mikulic
b2f504f975 . Add consolidate_slashes().
. make_safe_uri() may modify the URI string given to it.
. SAFE() and UNSAFE() don't pass const strings to make_safe_uri().
2013-04-28 19:44:11 +10:00
Emil Mikulic
41d2f5867a Solaris compatibility fixes.
. INADDR_NONE is -1
. Change bindport to an unsigned short (ntohs implies short).
. Conditionally implement our own errx() and err().
. Conditionally use a custom vasprintf() that depends on vsnprintf().
2013-04-28 19:44:11 +10:00
Emil Mikulic
466de20e2e . Cosmetics. 2013-04-28 19:44:11 +10:00
Emil Mikulic
255a78d0c4 . strip_endslash() should not have been reallocating argv[1]
. Remove strip_endslash() by boiling it down to one line and putting
  that line where the function call used to be.
2013-04-28 19:44:11 +10:00
Emil Mikulic
f7c0995234 . Don't need to nonblock the listening socket.
. Use acceptfilter.
2013-04-28 19:44:11 +10:00
Emil Mikulic
f0766d80f3 . Don't kill the whole server if recv() error occurs.
. Set conn_close to 1 on error to ensure connection closure.
2013-04-28 19:44:11 +10:00
Emil Mikulic
376c8b29fb . Make parse_request return int so it can return failure on malformed
requests.
. Make it bomb out on malformed requests like "moo\r\n\r\n"
2013-04-28 19:44:10 +10:00
Emil Mikulic
00fea650ed . IDLETIME -> idletime
. Construct keep_alive_field from idletime.
. Send keep_alive_field when there's no `Connection: close'
2013-04-28 19:44:10 +10:00
Emil Mikulic
dd4a217817 Fix conn->close logic:
. HTTP/1.1 protocol enables keep-alive.
. `Connection: keep-alive' enables keep-alive, regardless of protocol.
. `Connection: close' disables keep-alive.
2013-04-28 19:44:10 +10:00
Emil Mikulic
3389cc39d4 . Keep-alive connections work now.
. free_connection() now calls log_connection() for us.
. keepalive_connection() -> recycle_connection().
. recycle_connection() calls free_connection() (results in logging).
. Don't reset conn->client in recycle.
. Before main select loop, recycle keep-alive DONE connections.
2013-04-28 19:44:10 +10:00
Emil Mikulic
a07492c1a8 . In poll_send_{header,reply}(), don't bother deallocating stuff that
free_connection will deallocate anyway.
2013-04-28 19:44:10 +10:00
Emil Mikulic
2080b05d4c Starting work on Keep-Alive:
. Added conn_close to struct connection.
  0 = Keep-Alive, 1 = Connection: close
. Added keepalive_connection() for recycling connection structs.
. Made "Connection: close\r\n" in reply headers optional.
. If protocol is HTTP/1.1, use Keep-Alive, unless Connection: close is
  given in the request.

Offtopic:
. Improved request parsing - allow extraneous spaces.
2013-04-28 19:44:10 +10:00