Upload Tizen:Base source
[external/bash.git] / examples / scripts / websrv.sh
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
13 INDEX=index.html
14 date=`date`
15 DOCHOME=/home/insom/web-docs
16 BINHOME=/home/insom/web-bin
17 LOGHOME=/home/insom/web-logs
18 LOGFILE=$LOGHOME/access_log
19 #verbose=:
20 verbose=echo
21 exec 2>> $LOGHOME/error_log
22
23 hheader() {
24 echo "HTTP/1.0 200 OK
25 Server: WebSH/2.00
26 Connection: close
27 Date: $date"
28 }
29
30 header() {
31 echo "Content-type: $1
32 "
33 }
34
35 no_url() {
36   header "text/plain"
37   echo "No such url $1"
38 }
39
40 send() {
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
51 LsToHTML() {
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
82 read method data
83
84 $verbose "
85 $date access from ${TCPREMOTEINFO:=NO-IDENT}@${TCPREMOTEHOST:=$TCPREMOTEIP}
86         on local machine $TCPLOCALHOST
87          $method $data " >> $LOGFILE
88
89 for hopeurl in $data
90 do
91   url="${url}${url:+ }$second"
92   second="$hopeurl"
93 done
94
95 case "$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   ;;
111 esac
112
113 case "$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    ;;
230 esac