Very small HTTP/1.1 server requiring inetd or tcpsvd
Go to file
Neale Pickett c968d41b16 Updated README 2014-03-11 17:39:36 +00:00
contrib Log directory indexes, add webfs script 2012-11-07 19:23:28 -07:00
.gitignore Quit needing CFLAGS 2012-10-30 19:10:55 -06:00
CHANGES Fix 0.9 not detected with query_string 2013-02-14 16:39:14 -07:00
COPYING Import upstream 1.10 2011-08-16 14:36:11 -06:00
Makefile Quit needing CFLAGS 2012-10-30 19:10:55 -06:00
README Updated README 2014-03-11 17:39:36 +00:00
README.SSL Log on 304 2012-12-09 15:12:14 -07:00
TODO Bump version 2012-10-30 15:46:39 -05:00
break-fnord.sh Document known bugs 2012-04-30 12:52:53 -06:00
eris.c Fix 0.9 not detected with query_string 2013-02-14 16:39:14 -07:00
fuzz.sh add a fuzzer 2012-02-24 21:09:33 -07:00
mime.c Make it easier to Debianize 2012-10-30 17:45:19 -06:00
mime.h Make it easier to Debianize 2012-10-30 17:45:19 -06:00
strings.c Make it easier to Debianize 2012-10-30 17:45:19 -06:00
strings.h Make it easier to Debianize 2012-10-30 17:45:19 -06:00
test.sh Fix 0.9 not detected with query_string 2013-02-14 16:39:14 -07:00
timerfc.c Make it easier to Debianize 2012-10-30 17:45:19 -06:00
timerfc.h Make it easier to Debianize 2012-10-30 17:45:19 -06:00

README

About
=====

Eris HTTPD is a part of Dirtbags Capture The Flag
(http://dirtbags.net/ctf/).  As I was adding more and more patches
against fnord 1.10 (http://www.fefe.de/), I decided to fork fnord into
a new project.  Fnord's author approved of the fork.

Differences with fnord
======================

Significant differences between eris and fnord are:

* command-line arguments instead of compile-time defines
* eliminated use of libowfat
* no build dependency of dietlibc
* elimination of "old style symlink handling"
* elimination of user switching (you can use tcpserver -[ug])
* elimination of chroot code (you can use chroot)
* several bugfixes (sent to the fnord mail list)
* ignores Accept header (fnord also ignores it, but claims not to)

Usage
=====

Start with:

	tcpserver -v -RHl localhost -u 1234 -g 1234 0 80 ./eris

There are many other ways to start eris.
For example, you can run an HTTPS server using tcpsvd and sslio.

You just need something that launches eris with stdin and stdout connected to the client.


Logging
-------

Will log to stderr in the form

	127.0.0.1 200 23 localhost Links_(0.96;_Unix) none /index.html

where 127.0.0.1 is the client IP, 200 is the HTTP exit code,
23 is the size of the content that was served (or 0 for unsuccessful exit codes),
localhost is the Host: header (the virtual host),
the next token is the user agent with spaces replaced by underscores,
the next token (none) is the Referer HTTP header or "none" if none was given,
and the rest of each line is the decoded requested URL.


Features
--------

eris does simple virtual hosting.  If the `Host:` HTTP header is there,
eris will try to chdir to a directory of that name, i.e. if the client
asks for "/" on host "www.fefe.de", eris will look for
"www.fefe.de/index.html".  Eris will also try the directory "default"
if no specific directory for the virtual host was there.

eris implements el-cheapo HTTP ranges (only byte ranges and only of the
form x-y, not multiple ranges).

eris implements content type matching and Accepts: parsing, but the
content type table is compiled in, i.e. to change it, you have to change
the source code.  Shouldn't be a problem because you _have_ the source
code ;)

eris will change dots at the start of file or directory names to colons
in the query before trying to answer them.

eris understands and implements keep-alive connections.

eris will use sendfile on Linux to enable zero-copy TCP.

If eris is given the -c option, it will regard files
whose names end with ".cgi" as CGI programs and try to execute them.
CGI programs starting with "nph-" will be handled as no-parse-header
CGIs.
Please see <http://hoohoo.ncsa.uiuc.edu/cgi/interface.html> for the CGI specification.