Some bug statuses have been changed so the bugs file was also updated (some removed, some added). The manifest of 2004/hibachi was fixed some. The alt_url of 2004/gavare was fixed which required a rebuild of authors.html. For 2004/gavin a proper link to QEMU was added. It strikes me as it possibly being a good idea to have an FAQ about QEMU (as it is not just 2004/gavin that might benefit from it) but I don't know and in any case I have zero experience with it. The entries 2004/gavare, 2004/gavin and 2004/hibachi have been checked for format / display issues. This would suggest that the next entry to look at is 2004/hoyle.
239 lines
5.7 KiB
Markdown
239 lines
5.7 KiB
Markdown
## To build:
|
|
|
|
``` <!---sh-->
|
|
make
|
|
```
|
|
|
|
There is an alternate version that is unobfuscated, provided by the author in
|
|
2024\. See [Alternate code](#alternate-code) below.
|
|
|
|
### Bugs and (Mis)features:
|
|
|
|
The current status of this entry is:
|
|
|
|
> **STATUS: INABIAF - please DO NOT fix**
|
|
|
|
For more detailed information see [2004/hibachi in bugs.html](../../bugs.html#2004_hibachi).
|
|
|
|
|
|
|
|
|
|
## To use:
|
|
|
|
``` <!---sh-->
|
|
cd build; ./hibachi-start.sh &
|
|
```
|
|
|
|
Then use your web browser to visit `http://localhost:8008/`. When you're
|
|
finished make sure to kill `hibachi`.
|
|
|
|
**NOTE**: you must be in the `build` directory when running `hibachi-start.sh` for
|
|
this to work right.
|
|
|
|
|
|
## Alternate code:
|
|
|
|
This version, contained in `src-alt/`, is an unobfuscated version provided by
|
|
the author in 2024.
|
|
|
|
|
|
### Alternate build:
|
|
|
|
``` <!---sh-->
|
|
make alt
|
|
```
|
|
|
|
This will run the `configure` script and then compile and link in (in
|
|
`build-alt/`) the binary `hibachi`.
|
|
|
|
|
|
### Alternate use:
|
|
|
|
``` <!---sh-->
|
|
cd build-alt ; ./hibachi-start.sh &
|
|
```
|
|
|
|
Then with your browser do the same as for the original source.
|
|
|
|
|
|
## Judges' remarks:
|
|
|
|
This entry violates the [guidelines](../../2004/guidelines.txt) in so many ways! We
|
|
are not exactly sure how many organisations will be upset with this entry, but
|
|
we are considering starting an IOCCC standards body just to reign in the likes
|
|
of Mr Howe.
|
|
|
|
This entry also has the dubious honour of being the only one to have been
|
|
submitted with its own `configure` script.
|
|
|
|
**NOTE**: the author states there is a tarball `hibachi.tgz` but this was extracted
|
|
so the file does not exist here.
|
|
|
|
|
|
## Author's remarks:
|
|
|
|
### README.TXT (Feb 2004)
|
|
|
|
`Hibachi` is a simple, small, and (probably) very secure web server.
|
|
|
|
There is a `hibachi.tgz` file (**NOTE**: this file was removed by the judges after
|
|
extraction) that unpacks several support files and a subdirectory tree
|
|
containing the documentation and examples. It can be viewed by:
|
|
|
|
``` <!---sh-->
|
|
tar -zxf hibachi.tgz
|
|
lynx hibachi/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) to visit: `http://localhost:8008/`.
|
|
|
|
|
|
### Building
|
|
|
|
To build just the executable:
|
|
|
|
For Cygwin, FreeBSD, Linux (newer), Mac OS X:
|
|
|
|
``` <!---sh-->
|
|
gcc -o hibachi hibachi.c
|
|
```
|
|
|
|
For Linux (older):
|
|
|
|
``` <!---sh-->
|
|
gcc -DSHUT_WR=1 -o hibachi hibachi.c
|
|
```
|
|
|
|
For SunOS:
|
|
|
|
``` <!---sh-->
|
|
gcc -o hibachi hibachi.c -lnsl -lsocket
|
|
```
|
|
|
|
Since some systems place socket and network functions into other libraries, a
|
|
[GNU autoconf](https://en.wikipedia.org/wiki/Autoconf)
|
|
[configure](https://en.wikipedia.org/wiki/Configure_script) 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):
|
|
|
|
``` <!---sh-->
|
|
cd build;
|
|
./hibachi-start.sh &
|
|
```
|
|
|
|
To test the server:
|
|
|
|
``` <!---sh-->
|
|
lynx http://localhost:8008/
|
|
```
|
|
|
|
To stop the server:
|
|
|
|
``` <!---sh-->
|
|
kill %1
|
|
```
|
|
|
|
### Features
|
|
|
|
* Supports virtual hosts.
|
|
|
|
* Supports all [MIME](https://en.wikipedia.org/wiki/MIME) types.
|
|
|
|
* Supports CGI: [Common Gateway Interface](https://en.wikipedia.org/wiki/Common_Gateway_Interface) scripts and programs.
|
|
|
|
* Supports multiple `index.*` file extensions and types:
|
|
|
|
index.htm, index.html, index.php, index.pl, index.sh, index.rb, index.py
|
|
|
|
* Supports subset of [RFC 2616](https://datatracker.ietf.org/doc/html/rfc2616)
|
|
[HTTP/1.1](https://en.wikipedia.org/wiki/HTTP) 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](https://en.wikipedia.org/wiki/Inetd).
|
|
|
|
* Is secure against [relative path file
|
|
snooping](https://cwe.mitre.org/data/definitions/23.html).
|
|
|
|
* 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](http://www.acme.com/software/micro_httpd/) from <http://www.acme.com/>.
|
|
|
|
* And has a really cool tongue-in-cheek animated logo too.
|
|
|
|
|
|
### Comments
|
|
|
|
* This code is properly indented using the [One True Brace
|
|
style](https://wiki.c2.com/?OneTrueBraceStyle).
|
|
|
|
* `HTTP/1.0 200 OK` == `HTTP/1.1 200 OK CRLF Connection: close` ?
|
|
|
|
* `getenv()` == `putenv()` ?
|
|
|
|
* `Hibachi` can serve [www.ioccc.org](https://www.ioccc.org).
|
|
|
|
* Commented obfuscation change log information available.
|
|
|
|
### Known Issue
|
|
|
|
* The [links][1] (text) web browser does not support RFC 2616 section 7.2.1
|
|
paragraph 3 sentence 2, and so fails to display responses from
|
|
`hibachi`.
|
|
|
|
[1]: https://en.wikipedia.org/wiki/Links_(web_browser)
|
|
|
|
### Suggested IOCCC Categories
|
|
|
|
* Best Utility
|
|
* Best Support
|
|
* Most Portable Package
|
|
* Most Likely to Cook Apache
|
|
* Best Interpretation of RFC 2616
|
|
* Winner of The Far Too Much Free Time Award
|
|
|
|
|
|
### Changelog
|
|
|
|
For a list of significant changes made during development, see
|
|
[src/localhost/CHANGELOG.TXT](src/localhost/CHANGELOG.TXT).
|
|
|
|
|
|
<!--
|
|
|
|
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
|
|
|
|
You are free to share and adapt this file under the terms of this license:
|
|
|
|
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
|
|
|
For more information, see:
|
|
|
|
https://creativecommons.org/licenses/by-sa/4.0/
|
|
|
|
-->
|