source: vendor/bash/3.1-p17/examples/scripts/websrv.sh

Last change on this file was 3228, checked in by bird, 18 years ago

bash 3.1

File size: 4.4 KB
Line 
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
Note: See TracBrowser for help on using the repository browser.