| 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:[email protected]">[email protected]</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 <[email protected]>
|
|---|
| 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 [email protected] ; 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
|
|---|