summaryrefslogtreecommitdiffstats
path: root/scratch/bash-3.1/examples/scripts/websrv.sh
blob: e07746bc57eef189a728369f9eb2478cf7d2bcdb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#!/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