|
|
@ -58,13 +58,13 @@ DEBUG=
|
|
|
|
|
|
|
|
|
|
|
|
## function
|
|
|
|
## function
|
|
|
|
cleanup(){
|
|
|
|
cleanup(){
|
|
|
|
[ -n "$INF" ] && [ -p "$INF" ] && rm -f ${INF}
|
|
|
|
[ -n "$INF" ] && [ -p "$INF" ] && rm -f "${INF}"
|
|
|
|
exit 1
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
MYNAME=$(basename $0)
|
|
|
|
MYNAME=$(basename "$0")
|
|
|
|
MYDIR=$(dirname $(realpath $0))
|
|
|
|
MYDIR=$(dirname "$(realpath "$0")")
|
|
|
|
NETCAT=$(which $NETCAT)
|
|
|
|
NETCAT=$(which "$NETCAT")
|
|
|
|
|
|
|
|
|
|
|
|
if [ -z "${MYNAME#gosher}" ]; then
|
|
|
|
if [ -z "${MYNAME#gosher}" ]; then
|
|
|
|
## we are called as gosher -- launch the server
|
|
|
|
## we are called as gosher -- launch the server
|
|
|
@ -72,27 +72,30 @@ if [ -z "${MYNAME#gosher}" ]; then
|
|
|
|
PORT=${1:-70}
|
|
|
|
PORT=${1:-70}
|
|
|
|
GOPHERDIR=${2:-"./"}
|
|
|
|
GOPHERDIR=${2:-"./"}
|
|
|
|
|
|
|
|
|
|
|
|
[ ! -f "${NETCAT}" -o ! -x "${NETCAT}" ] && {
|
|
|
|
[ ! -f "${NETCAT}" ] || [ ! -x "${NETCAT}" ] && {
|
|
|
|
echo "Wrong NETCAT -- Exiting" >&2
|
|
|
|
echo "Wrong NETCAT -- Exiting" >&2
|
|
|
|
exit 2
|
|
|
|
exit 2
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if [ -f "${MYDIR}/gosher_serve" -o -h "${MYDIR}/gosher_serve" ]; then
|
|
|
|
if [ -f "${MYDIR}/gosher_serve" ] || [ -h "${MYDIR}/gosher_serve" ]; then
|
|
|
|
GOSHER_SERVE="${MYDIR}/gosher_serve"
|
|
|
|
GOSHER_SERVE="${MYDIR}/gosher_serve"
|
|
|
|
trap cleanup 0 HUP INT TRAP TERM QUIT
|
|
|
|
trap cleanup 0 HUP INT TRAP TERM QUIT
|
|
|
|
|
|
|
|
|
|
|
|
INF=${IPREFIX}$$
|
|
|
|
INF="${IPREFIX}$$"
|
|
|
|
[ "$STYLE" = "pipe" ] && {
|
|
|
|
[ "$STYLE" = "pipe" ] && {
|
|
|
|
mkfifo -m 600 $INF
|
|
|
|
mkfifo -m 600 "$INF"
|
|
|
|
|
|
|
|
# shellcheck disable=SC2050
|
|
|
|
while [ 1 -eq 1 ]; do
|
|
|
|
while [ 1 -eq 1 ]; do
|
|
|
|
${GOSHER_SERVE} ${GOPHERDIR} <$INF | ${NETCAT} -vvvvv -l -p ${PORT} >$INF
|
|
|
|
# shellcheck disable=SC2094
|
|
|
|
|
|
|
|
${GOSHER_SERVE} "${GOPHERDIR}" <"$INF" | ${NETCAT} -vvvvv -l -p "${PORT}" >"$INF"
|
|
|
|
done
|
|
|
|
done
|
|
|
|
rm -f $INF
|
|
|
|
rm -f $INF
|
|
|
|
exit 0
|
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
[ "$STYLE" = 'fork' ] && {
|
|
|
|
[ "$STYLE" = 'fork' ] && {
|
|
|
|
|
|
|
|
# shellcheck disable=SC2050
|
|
|
|
while [ 1 -eq 1 ]; do
|
|
|
|
while [ 1 -eq 1 ]; do
|
|
|
|
${NETCAT} -vv -l -p $PORT -c "${GOSHERSERVE} ${GOPHERDIR}"
|
|
|
|
${NETCAT} -vv -l -p "$PORT" -c "${GOSHER_SERVE} ${GOPHERDIR}"
|
|
|
|
done
|
|
|
|
done
|
|
|
|
exit 0
|
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -115,6 +118,7 @@ fi
|
|
|
|
invalid_selector(){
|
|
|
|
invalid_selector(){
|
|
|
|
sel="$1"
|
|
|
|
sel="$1"
|
|
|
|
echo "3Error: Invalid selector: \"$sel\""
|
|
|
|
echo "3Error: Invalid selector: \"$sel\""
|
|
|
|
|
|
|
|
# shellcheck disable=SC1117
|
|
|
|
printf ".\r\n"
|
|
|
|
printf ".\r\n"
|
|
|
|
exec 1>&-
|
|
|
|
exec 1>&-
|
|
|
|
exec 2>&-
|
|
|
|
exec 2>&-
|
|
|
@ -139,19 +143,20 @@ serve_index(){
|
|
|
|
IDX=$1
|
|
|
|
IDX=$1
|
|
|
|
IFS='
|
|
|
|
IFS='
|
|
|
|
'
|
|
|
|
'
|
|
|
|
while read line; do
|
|
|
|
while read -r line; do
|
|
|
|
rline=$(echo $line | sed -r -e 's/\r//g')
|
|
|
|
rline=$(echo "$line" | sed -r -e 's/\r//g')
|
|
|
|
case $rline in
|
|
|
|
case "$rline" in
|
|
|
|
'['*)
|
|
|
|
'['*)
|
|
|
|
echo $rline | sed -r -e 's/\[//g;s/\]//g;s/\|/\t/g;s/\t//;s/$/\r/g'
|
|
|
|
echo "$rline" | sed -r -e 's/\[//g;s/\]//g;s/\|/\t/g;s/\t//;s/$/\r/g'
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
t*)
|
|
|
|
t*)
|
|
|
|
echo $rline | cut -c 2-
|
|
|
|
echo "$rline" | cut -c 2-
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
*)
|
|
|
|
echo $line
|
|
|
|
echo "$line"
|
|
|
|
esac
|
|
|
|
esac
|
|
|
|
done < $IDX
|
|
|
|
done < "$IDX"
|
|
|
|
|
|
|
|
# shellcheck disable=SC1117
|
|
|
|
printf ".\r\n"
|
|
|
|
printf ".\r\n"
|
|
|
|
exec 1>&-
|
|
|
|
exec 1>&-
|
|
|
|
exec 2>&-
|
|
|
|
exec 2>&-
|
|
|
@ -183,9 +188,9 @@ EOF
|
|
|
|
|
|
|
|
|
|
|
|
GOPHERDIR=${1:-"./"}
|
|
|
|
GOPHERDIR=${1:-"./"}
|
|
|
|
|
|
|
|
|
|
|
|
read selector
|
|
|
|
read -r selector
|
|
|
|
|
|
|
|
|
|
|
|
selector=$(echo $selector | sed -r 's:\$.*::g;s:\r::g' )
|
|
|
|
selector=$(echo "$selector" | sed -r 's:\$.*::g;s:\r::g' )
|
|
|
|
|
|
|
|
|
|
|
|
[ -n "$DEBUG" ] && {
|
|
|
|
[ -n "$DEBUG" ] && {
|
|
|
|
echo "iGOPHERDIR: ${GOPHERDIR}"
|
|
|
|
echo "iGOPHERDIR: ${GOPHERDIR}"
|
|
|
@ -194,13 +199,15 @@ selector=$(echo $selector | sed -r 's:\$.*::g;s:\r::g' )
|
|
|
|
|
|
|
|
|
|
|
|
case $selector in
|
|
|
|
case $selector in
|
|
|
|
URL:*)
|
|
|
|
URL:*)
|
|
|
|
url=$(echo $selector | cut -d ":" -f 2-)
|
|
|
|
url=$(echo "$selector" | cut -d ":" -f 2-)
|
|
|
|
serve_redirect $url
|
|
|
|
serve_redirect "$url"
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
/?*|"")
|
|
|
|
/?*|"")
|
|
|
|
RP1=$(realpath "${GOPHERDIR}"/"${selector}" || "")
|
|
|
|
RP1=$(realpath "${GOPHERDIR}"/"${selector}" || "")
|
|
|
|
|
|
|
|
# shellcheck disable=SC2181
|
|
|
|
[ $? -eq 0 ] || invalid_selector "$selector"
|
|
|
|
[ $? -eq 0 ] || invalid_selector "$selector"
|
|
|
|
RP2=$(realpath "${GOPHERDIR}")"${selector}"
|
|
|
|
RP2=$(realpath "${GOPHERDIR}")"${selector}"
|
|
|
|
|
|
|
|
# shellcheck disable=SC2181
|
|
|
|
[ $? -eq 0 ] || invalid_selector "$selector"
|
|
|
|
[ $? -eq 0 ] || invalid_selector "$selector"
|
|
|
|
[ -n "$DEBUG" ] && {
|
|
|
|
[ -n "$DEBUG" ] && {
|
|
|
|
echo "iRP1: ${RP1}"
|
|
|
|
echo "iRP1: ${RP1}"
|
|
|
@ -209,8 +216,8 @@ case $selector in
|
|
|
|
|
|
|
|
|
|
|
|
if [ "${RP1}" = "${RP2}" ]; then
|
|
|
|
if [ "${RP1}" = "${RP2}" ]; then
|
|
|
|
if [ -f "${RP1}" ]; then
|
|
|
|
if [ -f "${RP1}" ]; then
|
|
|
|
if [ -n "$(echo $RP1 | sed -n '/\.gph$/p')" ]; then
|
|
|
|
if [ -n "$(echo "${RP1}" | sed -n '/\.gph$/p')" ]; then
|
|
|
|
serve_index $RP1
|
|
|
|
serve_index "${RP1}"
|
|
|
|
else
|
|
|
|
else
|
|
|
|
serve_selector "${RP1}"
|
|
|
|
serve_selector "${RP1}"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|