1#!/bin/sh
2#for instructions or updates go to:
3#<A HREF="http://math.ucr.edu:8889/">This script's home page</A>
4#email me questions or comments at:
5#<A HREF="mailto:insom@math.ucr.edu">insom@math.ucr.edu</A>
6#copyright chris ulrich; This software may be used or modified
7#in any way so long as this notice remains intact.
8#
9# WWW server in sh
10# Author: Chris Ulrich <chris@tinker.ucr.edu>
11#
12
13INDEX=index.html
14date=`date`
15DOCHOME=/home/insom/web-docs
16BINHOME=/home/insom/web-bin
17LOGHOME=/home/insom/web-logs
18LOGFILE=$LOGHOME/access_log
19#verbose=:
20verbose=echo
21exec 2>> $LOGHOME/error_log
22
23hheader() {
24echo "HTTP/1.0 200 OK
25Server: WebSH/2.00
26Connection: close
27Date: $date"
28}
29
30header() {
31echo "Content-type: $1
32"
33}
34
35no_url() {
36  header "text/plain"
37  echo "No such url $1"
38}
39
40send() {
41  #case "$#" in 2) ;; *) echo eep! | mailx insom@math.ucr.edu  ; exit 3 ;; esac
42  if test -f "$DOCHOME/$2"
43  then
44    header "$1"
45    cat "$DOCHOME/$2"
46  else
47    no_url "$2"
48  fi
49}
50
51LsToHTML() {
52  if test -f "$DOCHOME/$url/.title"
53  then
54    header "text/html; charset=US-ASCII"
55    echo "<pre>"
56    cat "$DOCHOME/$url/.title"
57    echo "</pre>"
58  elif test -f "$DOCHOME/$url/.title.html"
59  then
60    header "text/html; charset=US-ASCII"
61    cat "$DOCHOME/$url/.title.html"
62  else
63    header "text/html; charset=US-ASCII"
64  fi
65
66  case "$url" in 
67     /) ;;
68     *) url="$url/"
69  esac
70
71  while read link
72  do
73   case $link in
74     *.cgi) ;;
75     *)
76        echo "<A HREF=\"$url$link\">$link</A> <BR>"
77     ;;
78   esac
79  done
80}
81
82read method data
83
84$verbose "
85$date access from ${TCPREMOTEINFO:=NO-IDENT}@${TCPREMOTEHOST:=$TCPREMOTEIP}
86	on local machine $TCPLOCALHOST
87	 $method $data " >> $LOGFILE
88
89for hopeurl in $data
90do
91  url="${url}${url:+ }$second"
92  second="$hopeurl"
93done
94
95case "$second" in
96  *[1-9].*) 
97     read inheader
98     while 
99        case "$inheader" in 
100          ?|'') false 
101           ;;
102          *) 
103            read inheader
104           ;; 
105        esac 
106     do
107       :
108     done
109     hheader
110  ;;
111esac
112
113case "$url" in
114  *..*)
115    no_url "$url"
116    exit 1
117   ;;
118  *.txt|*.[ch])
119    send "text/plain; charset=US-ASCII" "$url"
120    ;;
121  *.html)
122    send "text/html; charset=US-ASCII" "$url"
123   ;;
124  *.cgi)
125    if test -x "$DOCHOME/$url" 
126    then 
127      read message
128      echo "$message" | "$DOCHOME/$url"
129    else
130      no_url "$url"
131    fi
132   ;;
133  *".cgi?"*)
134    oIFS="$IFS"
135    echo "$url"  | { 
136      IFS='?' read url QUERY_STRING
137      if test -x "$DOCHOME/$url" 
138      then
139        IFS="$oIFS"
140        export QUERY_STRING 
141        "$DOCHOME/$url" 
142      else
143        no_url "$url"
144      fi
145       }
146   ;;
147  *.[Gg][Ii][Ff])
148    send "image/gif" "$url"
149   ;;
150  *.[Jj][Pp][Gg]|*.[Jj][Pp][Ee][Gg])
151    send "image/jpeg" "$url"
152   ;;
153  *.tbl)
154    header "text/html; charset=US-ASCII"
155    echo "<pre>"
156    test -f "$DOCHOME/$url" && 
157      tbl < "$DOCHOME/$url"  | nroff ||
158      no_url "$url" 
159    echo "</pre>"
160   ;;
161  *.nroff)
162    header "text/html; charset=US-ASCII"
163    echo "<pre>"
164    test -f "$DOCHOME/$url" && 
165      nroff < "$DOCHOME/$url" ||
166      no_url "$url" 
167    echo "</pre>"
168   ;;
169  *mp[23])
170    if test -f "$DOCHOME/$url" 
171    then
172      header "application/mpstream"
173      echo "+$TCPLOCALIP:${MPSERVPORT:=9001}/$url"
174    else 
175      no_url "$url" 
176    fi
177   ;;
178  *.[0-9]|*.[0-9][a-z])
179    header "text/html; charset=US-ASCII"
180    echo "<pre>"
181    if test -f "$DOCHOME/$url" 
182    then
183      #nroff -man  "$DOCHOME/$url" | $BINHOME/man2html
184      echo "perl at the moment is broken, so man2html doesn't work.  Sorry."
185      echo "</pre>"
186    else 
187      no_url "$url"
188    fi
189   ;;
190  *.???|*.??)
191    send "unknown/data" "$url"
192   ;;
193  */)
194    if test -d "$DOCHOME/$url"
195    then 
196      ls "$DOCHOME/$url" | LsToHTML
197    fi
198   ;;
199  *)
200   if test -f "$DOCHOME/$url"
201   then
202     read filetype < "$DOCHOME/$url"
203     case "$filetype" in
204       \#!/*/*|\#!?/*/*)
205         header "text/plain; charset=US-ASCII"
206         cat "$DOCHOME/$url"
207         ;;
208       '<!*>')
209         header "text/html; charset=US-ASCII"
210         cat "$DOCHOME/$url"
211        ;;
212       *)
213         header "text/html; charset=US-ASCII"
214         echo "<pre>"
215         cat "$DOCHOME/$url"
216         echo "</pre>"
217        ;;
218     esac
219   elif test -f "$DOCHOME/$url/$INDEX"
220   then
221     header "text/html; charset=US-ASCII"
222     cat "$DOCHOME/$url/$INDEX"
223   elif test -d "$DOCHOME/$url"
224   then 
225     ls "$DOCHOME/$url" | LsToHTML
226   else
227     no_url "$url" 
228   fi
229   ;;
230esac
231