Best Abuse of the Guidelines - IOCCC 2004 Winner
Hibachi is a simple, small, and (probably) very secure web server.
There is a `supplement.tar.gz’ file that unpacks several support files and a sub-directory tree containing the documentation and examples. It can be viewed by:
tar -zxf supplement.tar.gz
lynx localhost/index.html
Or once Hibachi is running, use a web browser, preferably one that
supports images and JavaScript, to view the documentation and try
some of the CGI examples:
http://localhost:8008/
To build just the executable:
# Cygwin, FreeBSD, Linux (newer)
gcc -ohibachi hibachi.c
# Linux (older)
gcc -DSHUT_WR=1 -ohibachi hibachi.c
# SunOS
gcc -ohibachi hibachi.c -lnsl -lsocket
Since some systems place socket and network functions into other libraries, a GNU autoconf ./configure script has been provided to figure out the necessary link libraries, to verify all the necessary headers and functions are present, and setup the #! paths for the CGI examples. In which case the preferred build commands are:
./configure [--enable-port=number]
make
To start the server on the default port (8008):
./hibachi-start.sh &
To test the server:
lynx http://localhost:8008/
To stop the server:
kill %1
Supports virtual hosts.
Supports all MIME types.
Supports Common Gateway Interface (CGI) scripts and programs.
Supports multiple index.* file types:
index.htm, index.html, index.php, index.pl,
index.sh, index.rb, index.py
Supports subset of RFC 2616 HTTP/1.1 methods: GET, HEAD, and POST
Simple & straight forward configuration using environment variables.
Portability across Unix-like environments, such as:
Cygwin, FreeBSD, Linux, SunOS.
Known to work with Lynx, Mozilla, Opera, and Internet Explorer web browsers.
Is a dedicated process-forking server that does not use inetd.
Is secure against relative path file snooping.
Is secure against directory searches.
CGI script execution managed through Unix file permissions.
~155 lines of source,
1940 bytes long by IOCCC 2004 rules,
~6KB compiled & stripped for FreeBSD.
Superior & smaller than micro_httpd from http://www.acme.com/
And has a really cool tongue-in-cheek animated logo too.
This code is properly indented using the One True Brace style.
HTTP/1.0 200 OK == HTTP/1.1 200 OK CRLF Connection: close ?
getenv() == putenv() ?
Hibachi can server www.ioccc.org.
Commented spoiler available.