#!/bin/sh
mimetype () {
NAME=`echo $1 | /usr/bin/tr '[:upper:]' '[:lower:]'`
case "$NAME" in
*.gif) MIMETYPE="image/gif";;
*.html) MIMETYPE="text/html";;
*.jpg) MIMETYPE="image/jpeg";;
*.png) MIMETYPE="image/png";;
*) MIMETYPE="text/plain";;
esac
}
basedir () {
HOST=`echo $1 | /usr/bin/sed 's/^http:\/\///'`
HOST=`echo $HOST | /usr/bin/sed 's/\/.*$//'`
HOST=`echo $HOST | /usr/bin/sed 's/:.*$//'`
case "$HOST" in
# *.meow.org.uk) BASEDIR="/home/andreww/public_html/";;
*) BASEDIR="/var/apache/htdocs/";;
esac
}
filename() {
FILENAME=`echo $URI | /usr/bin/sed 's/^http:\/\///'`
FILENAME=`echo $FILENAME | /usr/bin/sed s/\^$HOST//`
case "$FILENAME" in
*/) FILENAME=`echo $FILENAME | /usr/bin/sed 's/$/\/index.html/'`;;
esac
}
URI=""
REQ="n"
EXIT="n"
INPLINE="some arbitrary random value"
while [ "$EXIT" = "n" ] ; do
read INPLINE
INPLINE=`echo $INPLINE | sed 's/^M$//'`
echo $INPLINE >> /var/tmp/httpd.out
INPLINE=`echo $INPLINE | /usr/bin/sed 's/^ *//'`
if [ -z "$INPLINE" ] && [ "$REQ" = "y" ] ; then
EXIT="y"
fi
COMMAND=`echo $INPLINE | /usr/bin/cut -d" " -f1`
case "$COMMAND" in
GET|HEAD) REQ="y"
METHOD=$COMMAND
URI=`echo $INPLINE | /usr/bin/cut -d" " -f2`;;
esac
done
case "$URI" in
http://*) ;;
*) URI=`echo $URI | /usr/bin/sed 's/^/http:\/\/www.meow.org.uk\//'`;;
esac
basedir "$URI"
filename "$URI"
mimetype "$FILENAME"
RESPONSE="200"
if [ ! -r "$BASEDIR/$FILENAME" ] ; then
RESPONSE="404"
MIMETYPE="text/html"
fi
echo "HTTP/1.0 $RESPONSE Oh well"
echo "Server: httpd-sh andrew wales"
echo "Content-type: $MIMETYPE"
if [ "$METHOD" = "GET" ] ; then
echo
case "$RESPONSE" in
200) /usr/bin/cat $BASEDIR/$FILENAME;;
404) echo "oops, file not found";;
*) echo "broken behaviour. imagine";;
esac
fi
# vim:ts=4