92 lines
3.0 KiB

Eris HTTPD is a part of [Dirtbags Capture The Flag](
As I was adding more and more patches against [fnord 1.10](,
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)
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.
Will log to stderr in the form 200 23 localhost Links_(0.96;_Unix) none /index.html
where 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 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 "", eris will look for
"". 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
Please see <> for the CGI specification.
About The Name
is the most massive (heaviest) dwarf planet in the solar system.
It's heavier than Pluto!
Its discovery is what spurred astronomers to finally define the word "planet",
which resulted in Pluto being classified a dwarf planet.
Otherwise, we would have to count Eris as a tenth planet.