#!/bin/ksh # www->gopher # Make your SDF gopherspace visible inside your SDF webspace # Copyright (c) 2010 Claudio Calvelli ; # see below for information about copying, redistributing, etc. # Please include the word GOPHER in the subject if sending email, so # it doesn't get deleted as spam by mistake # To install: copy into your webspace (make sure you make it executable # and the name ends in ".cgi"); access the corresponding URL and make # sure it works; link to it. For example, if installed as "gopher.cgi" # at the top of your webspace, it will be accessible as # http://(your username).freeshell.org/gopher.cgi # the script handles subdirectories in your gopher space automatically; # however they must contain a "gophermap" file (it would be easy to modify # this so it does not need a "gophermap", however I don't need it so # I haven't - subject to the conditions below, feel free to make the # necessary changes). # Permission is hereby granted to use, misuse, modify, distribute, break, # fix again, etcetera, this software, provided that the following conditions # are met: # 1. Redistributions of this software must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. As the software is a shel script, it is normally not possible to # distribute it in binary (non human readable) form; however, if # such binary distribution is possible, it must reproduce the above # copyright notice, this list of conditions and the following disclaimer # in the documentation and/or other materials provided with the # distribution. # 3. Neither the name of the Author nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. if [ "$HTTP_HOST" = '' ] then echo 3 echo "3 You appear to be accessing this via gopher. This is a" echo "3 www to gopher gateway, and you do not need it." exit 0 fi path="$PATH_INFO" case "$path" in */.*|.*) echo "Status: 403 Forbidden" echo "Content-Type: text/plain" echo echo "Sorry, you do not have permission to access that" exit 0 ;; esac user="`whoami`" full_path="/ftp/pub/users/$user/$path" if [ -x "$full_path" ] then case "$path" in *.cgi) exec "$full_path" ;; esac fi if [ -f "$full_path" ] then echo "Status: 200 OK" echo "Content-Type: text/plain" echo cat "$full_path" exit 0 fi if ! [ -d "$full_path" ] then echo "Status: 404 Not found" echo "Content-Type: text/plain" echo echo "Sorry, the path you requested was not found" exit 0 fi case "$path" in */) ;; *) echo 'Status: 301 Moved permanently' echo 'Content-Type: text/html; charset=iso-8859-1' echo "Location: http://$HTTP_HOST$REQUEST_URI/" echo '' echo '' echo '' echo '301 Moved Permanently' echo '' echo '

Moved Permanently

' echo '

The document has moved' echo 'here.

' echo '' exit 0 ;; esac echo "Status: 200 OK" echo "Content-Type: text/html" echo echo '' echo '' echo '' echo '' echo "Index of $path" echo '' echo '' echo '

' export IFS=' ' dq='"' while read name file host port do if [ "$host" != '' ] then [ "$port" = '' ] || port=":$port" type="`echo "$name" | dd bs=1 count=1 2>/dev/null`" echo "${name#?} (gopher link, may not work in your browser)
" else if [ "$file" = '' ] then [ "$name" = '' ] && name=' ' echo "$name
" else case "$name" in 1*) echo "${name#1}/
" ;; *) echo "${name#?}
" ;; esac fi fi done < "$full_path/gophermap" echo '

' echo '' echo ''