230 lines
4.4 KiB
Bash
230 lines
4.4 KiB
Bash
#!/bin/sh
|
|
#for instructions or updates go to:
|
|
#<A HREF="http://math.ucr.edu:8889/">This script's home page</A>
|
|
#email me questions or comments at:
|
|
#<A HREF="mailto:insom@math.ucr.edu">insom@math.ucr.edu</A>
|
|
#copyright chris ulrich; This software may be used or modified
|
|
#in any way so long as this notice remains intact.
|
|
#
|
|
# WWW server in sh
|
|
# Author: Chris Ulrich <chris@tinker.ucr.edu>
|
|
#
|
|
|
|
INDEX=index.html
|
|
date=`date`
|
|
DOCHOME=/home/insom/web-docs
|
|
BINHOME=/home/insom/web-bin
|
|
LOGHOME=/home/insom/web-logs
|
|
LOGFILE=$LOGHOME/access_log
|
|
#verbose=:
|
|
verbose=echo
|
|
exec 2>> $LOGHOME/error_log
|
|
|
|
hheader() {
|
|
echo "HTTP/1.0 200 OK
|
|
Server: WebSH/2.00
|
|
Connection: close
|
|
Date: $date"
|
|
}
|
|
|
|
header() {
|
|
echo "Content-type: $1
|
|
"
|
|
}
|
|
|
|
no_url() {
|
|
header "text/plain"
|
|
echo "No such url $1"
|
|
}
|
|
|
|
send() {
|
|
#case "$#" in 2) ;; *) echo eep! | mailx insom@math.ucr.edu ; exit 3 ;; esac
|
|
if test -f "$DOCHOME/$2"
|
|
then
|
|
header "$1"
|
|
cat "$DOCHOME/$2"
|
|
else
|
|
no_url "$2"
|
|
fi
|
|
}
|
|
|
|
LsToHTML() {
|
|
if test -f "$DOCHOME/$url/.title"
|
|
then
|
|
header "text/html; charset=US-ASCII"
|
|
echo "<pre>"
|
|
cat "$DOCHOME/$url/.title"
|
|
echo "</pre>"
|
|
elif test -f "$DOCHOME/$url/.title.html"
|
|
then
|
|
header "text/html; charset=US-ASCII"
|
|
cat "$DOCHOME/$url/.title.html"
|
|
else
|
|
header "text/html; charset=US-ASCII"
|
|
fi
|
|
|
|
case "$url" in
|
|
/) ;;
|
|
*) url="$url/"
|
|
esac
|
|
|
|
while read link
|
|
do
|
|
case $link in
|
|
*.cgi) ;;
|
|
*)
|
|
echo "<A HREF=\"$url$link\">$link</A> <BR>"
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
read method data
|
|
|
|
$verbose "
|
|
$date access from ${TCPREMOTEINFO:=NO-IDENT}@${TCPREMOTEHOST:=$TCPREMOTEIP}
|
|
on local machine $TCPLOCALHOST
|
|
$method $data " >> $LOGFILE
|
|
|
|
for hopeurl in $data
|
|
do
|
|
url="${url}${url:+ }$second"
|
|
second="$hopeurl"
|
|
done
|
|
|
|
case "$second" in
|
|
*[1-9].*)
|
|
read inheader
|
|
while
|
|
case "$inheader" in
|
|
?|'') false
|
|
;;
|
|
*)
|
|
read inheader
|
|
;;
|
|
esac
|
|
do
|
|
:
|
|
done
|
|
hheader
|
|
;;
|
|
esac
|
|
|
|
case "$url" in
|
|
*..*)
|
|
no_url "$url"
|
|
exit 1
|
|
;;
|
|
*.txt|*.[ch])
|
|
send "text/plain; charset=US-ASCII" "$url"
|
|
;;
|
|
*.html)
|
|
send "text/html; charset=US-ASCII" "$url"
|
|
;;
|
|
*.cgi)
|
|
if test -x "$DOCHOME/$url"
|
|
then
|
|
read message
|
|
echo "$message" | "$DOCHOME/$url"
|
|
else
|
|
no_url "$url"
|
|
fi
|
|
;;
|
|
*".cgi?"*)
|
|
oIFS="$IFS"
|
|
echo "$url" | {
|
|
IFS='?' read url QUERY_STRING
|
|
if test -x "$DOCHOME/$url"
|
|
then
|
|
IFS="$oIFS"
|
|
export QUERY_STRING
|
|
"$DOCHOME/$url"
|
|
else
|
|
no_url "$url"
|
|
fi
|
|
}
|
|
;;
|
|
*.[Gg][Ii][Ff])
|
|
send "image/gif" "$url"
|
|
;;
|
|
*.[Jj][Pp][Gg]|*.[Jj][Pp][Ee][Gg])
|
|
send "image/jpeg" "$url"
|
|
;;
|
|
*.tbl)
|
|
header "text/html; charset=US-ASCII"
|
|
echo "<pre>"
|
|
test -f "$DOCHOME/$url" &&
|
|
tbl < "$DOCHOME/$url" | nroff ||
|
|
no_url "$url"
|
|
echo "</pre>"
|
|
;;
|
|
*.nroff)
|
|
header "text/html; charset=US-ASCII"
|
|
echo "<pre>"
|
|
test -f "$DOCHOME/$url" &&
|
|
nroff < "$DOCHOME/$url" ||
|
|
no_url "$url"
|
|
echo "</pre>"
|
|
;;
|
|
*mp[23])
|
|
if test -f "$DOCHOME/$url"
|
|
then
|
|
header "application/mpstream"
|
|
echo "+$TCPLOCALIP:${MPSERVPORT:=9001}/$url"
|
|
else
|
|
no_url "$url"
|
|
fi
|
|
;;
|
|
*.[0-9]|*.[0-9][a-z])
|
|
header "text/html; charset=US-ASCII"
|
|
echo "<pre>"
|
|
if test -f "$DOCHOME/$url"
|
|
then
|
|
#nroff -man "$DOCHOME/$url" | $BINHOME/man2html
|
|
echo "perl at the moment is broken, so man2html doesn't work. Sorry."
|
|
echo "</pre>"
|
|
else
|
|
no_url "$url"
|
|
fi
|
|
;;
|
|
*.???|*.??)
|
|
send "unknown/data" "$url"
|
|
;;
|
|
*/)
|
|
if test -d "$DOCHOME/$url"
|
|
then
|
|
ls "$DOCHOME/$url" | LsToHTML
|
|
fi
|
|
;;
|
|
*)
|
|
if test -f "$DOCHOME/$url"
|
|
then
|
|
read filetype < "$DOCHOME/$url"
|
|
case "$filetype" in
|
|
\#!/*/*|\#!?/*/*)
|
|
header "text/plain; charset=US-ASCII"
|
|
cat "$DOCHOME/$url"
|
|
;;
|
|
'<!*>')
|
|
header "text/html; charset=US-ASCII"
|
|
cat "$DOCHOME/$url"
|
|
;;
|
|
*)
|
|
header "text/html; charset=US-ASCII"
|
|
echo "<pre>"
|
|
cat "$DOCHOME/$url"
|
|
echo "</pre>"
|
|
;;
|
|
esac
|
|
elif test -f "$DOCHOME/$url/$INDEX"
|
|
then
|
|
header "text/html; charset=US-ASCII"
|
|
cat "$DOCHOME/$url/$INDEX"
|
|
elif test -d "$DOCHOME/$url"
|
|
then
|
|
ls "$DOCHOME/$url" | LsToHTML
|
|
else
|
|
no_url "$url"
|
|
fi
|
|
;;
|
|
esac
|