|
|
|
@ -98,20 +98,22 @@ if [ -z "${MYNAME#gosher}" ]; then
|
|
|
|
|
[ "$STYLE" = "pipe" ] && {
|
|
|
|
|
mkfifo -m 600 "$INF"
|
|
|
|
|
# shellcheck disable=SC2050
|
|
|
|
|
while [ 1 -eq 1 ]; do
|
|
|
|
|
while :; do
|
|
|
|
|
# shellcheck disable=SC2094
|
|
|
|
|
${GOSHER_SERVE} "${GOPHERDIR}" \
|
|
|
|
|
"${HOSTNAME}" "${PORT}" <"$INF" |\
|
|
|
|
|
${NETCAT} -vvvvv -l "${HOSTNAME}" "${PORT}" >"$INF"
|
|
|
|
|
sleep 1
|
|
|
|
|
done
|
|
|
|
|
rm -f $INF
|
|
|
|
|
exit 0
|
|
|
|
|
}
|
|
|
|
|
[ "$STYLE" = 'fork' ] && {
|
|
|
|
|
# shellcheck disable=SC2050
|
|
|
|
|
while [ 1 -eq 1 ]; do
|
|
|
|
|
while :; do
|
|
|
|
|
${NETCAT} -vv -l -p "$PORT" -c \
|
|
|
|
|
"${GOSHER_SERVE} ${GOPHERDIR} ${HOSTNAME} ${PORT}"
|
|
|
|
|
sleep 1
|
|
|
|
|
done
|
|
|
|
|
exit 0
|
|
|
|
|
}
|
|
|
|
@ -153,28 +155,26 @@ serve_selector(){
|
|
|
|
|
exit 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### transform a .gph file into a gophermap
|
|
|
|
|
## function
|
|
|
|
|
serve_index(){
|
|
|
|
|
IDX=$1
|
|
|
|
|
IFS='
|
|
|
|
|
'
|
|
|
|
|
IDX=$1
|
|
|
|
|
|
|
|
|
|
echo "[$(date +%Y-%m-%d\ %H:%M:%S)|GPH|${IDX}|\"\"]" >&2
|
|
|
|
|
while read -r line; do
|
|
|
|
|
rline=$(echo "$line" | tr -d '\r')
|
|
|
|
|
case "$rline" in
|
|
|
|
|
'['*)
|
|
|
|
|
echo "$rline" | sed -r -e 's/\[//g;s/\]//g;s/\|/ /g;s/ //;s/$/\r/g'
|
|
|
|
|
;;
|
|
|
|
|
t*)
|
|
|
|
|
echo "$rline" | cut -c 2-
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
echo "$line"
|
|
|
|
|
esac
|
|
|
|
|
done < "$IDX"
|
|
|
|
|
while read -r line; do
|
|
|
|
|
rline=$(echo "$line" | tr -d '\r')
|
|
|
|
|
case "$rline" in
|
|
|
|
|
'['*)
|
|
|
|
|
line=$(echo "$rline" | sed -r -e 's/\[//g;s/\]//g;s/\|/ /g;s/ / /;')
|
|
|
|
|
;;
|
|
|
|
|
t*)
|
|
|
|
|
line=$(echo "$rline" | cut -b 2-)
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
printf '%s\r\n' "$line"
|
|
|
|
|
done < "$IDX"
|
|
|
|
|
# shellcheck disable=SC1117
|
|
|
|
|
printf ".\r\n"
|
|
|
|
|
exec 1>&-
|
|
|
|
@ -210,19 +210,19 @@ serve_cgi(){
|
|
|
|
|
script_name=$( echo "$1" | sed -r 's:^/+::')
|
|
|
|
|
query_string="$2"
|
|
|
|
|
echo "[$(date +%Y-%m-%d\ %H:%M:%S)|CGI|${script_name}|\"${query_string}\"]" >&2
|
|
|
|
|
GATEWAY_INTERFACE="CGI/1.1"
|
|
|
|
|
PATH_INFO="${script_name}"
|
|
|
|
|
PATH_TRANSLATED="${script_name}"
|
|
|
|
|
GATEWAY_INTERFACE="CGI/1.1"
|
|
|
|
|
PATH_INFO="${script_name}"
|
|
|
|
|
PATH_TRANSLATED="${script_name}"
|
|
|
|
|
[ -n "${QUERY_STRING}" ] && QUERY_STRING="${query_string}"
|
|
|
|
|
REMOTE_ADDR=
|
|
|
|
|
REMOTE_HOST=
|
|
|
|
|
REQUEST_METHOD="GET"
|
|
|
|
|
SCRIPT_NAME="${script_name}"
|
|
|
|
|
SERVER_NAME="${HOSTNAME}"
|
|
|
|
|
SERVER_PORT="${PORT}"
|
|
|
|
|
SERVER_PROTOCOL="gopher/1.0"
|
|
|
|
|
SERVER_SOFTWARE="gosher"
|
|
|
|
|
####X_GOPHER_SEARCH= search (See above.)
|
|
|
|
|
REMOTE_ADDR=
|
|
|
|
|
REMOTE_HOST=
|
|
|
|
|
REQUEST_METHOD="GET"
|
|
|
|
|
SCRIPT_NAME="${script_name}"
|
|
|
|
|
SERVER_NAME="${HOSTNAME}"
|
|
|
|
|
SERVER_PORT="${PORT}"
|
|
|
|
|
SERVER_PROTOCOL="gopher/1.0"
|
|
|
|
|
SERVER_SOFTWARE="gosher"
|
|
|
|
|
####X_GOPHER_SEARCH= search (See above.)
|
|
|
|
|
export GATEWAY_INTERFACE PATH_INFO PATH_TRANSLATED QUERY_STRING
|
|
|
|
|
export REMOTE_ADDR REMOTE_HOST REQUEST_METHOD SCRIPT_NAME
|
|
|
|
|
export SERVER_NAME SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE
|
|
|
|
@ -238,7 +238,6 @@ HOSTNAME=${2:-"localhost"}
|
|
|
|
|
PORT=${3:-"70"}
|
|
|
|
|
|
|
|
|
|
read -r selector
|
|
|
|
|
|
|
|
|
|
selector=$(echo "$selector" | tr -d '\r' )
|
|
|
|
|
|
|
|
|
|
[ -n "$DEBUG" ] && {
|
|
|
|
@ -249,19 +248,19 @@ selector=$(echo "$selector" | tr -d '\r' )
|
|
|
|
|
case "$selector" in
|
|
|
|
|
URL:*)
|
|
|
|
|
## it's a special URL selector
|
|
|
|
|
url=$(echo "$selector" | cut -d ":" -f 2- | sed 's:^//::g')
|
|
|
|
|
url=$(echo "$selector" | cut -d ":" -f 2-)
|
|
|
|
|
serve_redirect "$url"
|
|
|
|
|
;;
|
|
|
|
|
;;
|
|
|
|
|
/?*.cgi*)
|
|
|
|
|
## it's a CGI
|
|
|
|
|
script_name=$(echo "$selector" | cut -d "?" -f 1)
|
|
|
|
|
query_string=$(echo "$selector" | cut -d "?" -f 2)
|
|
|
|
|
[ "${script_name}" = "${query_string}" ] && query_string=""
|
|
|
|
|
RP1=$(readlink -f "${GOPHERDIR}""${script_name}" || "")
|
|
|
|
|
RP1=$(readlink -f "${GOPHERDIR}""${script_name}")
|
|
|
|
|
# shellcheck disable=SC2181
|
|
|
|
|
[ $? -eq 0 ] || invalid_selector "${selector}"
|
|
|
|
|
RP2=$(readlink -f "${GOPHERDIR}")"${script_name}"
|
|
|
|
|
RP2=$(echo "${RP2}" | sed -r 's/\/+/\//g')
|
|
|
|
|
RP2=$(echo "${RP2}" | sed -r 's:/+:/:g')
|
|
|
|
|
# shellcheck disable=SC2181
|
|
|
|
|
[ $? -eq 0 ] || invalid_selector "${selector}"
|
|
|
|
|
[ -n "$DEBUG" ] && {
|
|
|
|
@ -278,7 +277,7 @@ case "$selector" in
|
|
|
|
|
;;
|
|
|
|
|
/?*|"")
|
|
|
|
|
## it's a regular selector
|
|
|
|
|
RP1=$(readlink -f "${GOPHERDIR}"/"${selector}" || "")
|
|
|
|
|
RP1=$(readlink -f "${GOPHERDIR}"/"${selector}")
|
|
|
|
|
# shellcheck disable=SC2181
|
|
|
|
|
[ $? -eq 0 ] || invalid_selector "$selector"
|
|
|
|
|
RP2=$(readlink -f "${GOPHERDIR}")"${selector}"
|
|
|
|
@ -312,4 +311,3 @@ case "$selector" in
|
|
|
|
|
invalid_selector "/"
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|