eris/README

80 lines
3.4 KiB
Plaintext
Raw Normal View History

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, Fefe, approved of the fork.
The 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 (use tcpserver)
* elimination of chroot code (use chroot)
* several bugfixes (which have been sent to the fnord mail list)
----
2011-08-16 14:36:11 -06:00
Usage:
tcpserver -v -RHl localhost -u 1234 -g 1234 0 80 ./httpd
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.
eris httpd 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:80", eris will look for
"www.fefe.de:80/index.html". Eris will also try the directory
2011-08-16 14:36:11 -06:00
"default" if no specific directory for the virtual host was there. If
the directory is a dangling symlink and eris was compiled with
-DREDIRECT (default), eris will redirect the whole site. Examples:
2011-08-16 14:36:11 -06:00
lrwxrwxrwx 1 leitner users 19 May 5 01:09 www.foo.de:80 -> http://www.baz.de/
lrwxrwxrwx 1 leitner users 20 May 5 01:12 www.bar.de:80 -> =http://www.baz.de/
http://www.foo.de/blub.html will be redirected to http://www.baz.de/blub.html.
http://www.bar.de/blub.html will be redirected to http://www.baz.de/.
eris implements el-cheapo HTTP ranges (only byte ranges and only of the
2011-08-16 14:36:11 -06:00
form x-y, not multiple ranges).
eris implements content type matching and Accepts: parsing, but the
2011-08-16 14:36:11 -06:00
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 implements HTTP redirection. If a file is not found, but a
dangling symlink is there under the same name, eris will issue a
2011-08-16 14:36:11 -06:00
redirection to the contents of that symlink. To be RFC compliant, the
symlink must point to a full URL, i.e.
ln -s ftp://foobar.math.fu-berlin.de/pub/dietlibc/dietlibc-0.11.tar.bz2 dietlibc-0.11.tar.bz2
eris implements in-place substitution of * to *.gz
2011-08-16 14:36:11 -06:00
if the file is available and the client supports the mime-type and
content-encoding. That means you can save substantial bandwidth by
having an index.html.gz for each index.html, as most clients can
transparently decode gzipped files.
eris will change dots at the start of file or directory names to colons
2011-08-16 14:36:11 -06:00
in the query before trying to answer them.
eris understands and implements keep-alive connections.
2011-08-16 14:36:11 -06:00
eris can use sendfile on Linux to enable zero-copy TCP.
2011-08-16 14:36:11 -06:00
If eris is given the -c option, it will regard files
2011-08-16 14:36:11 -06:00
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.