diff options
-rwxr-xr-x | gosher | 74 |
1 files changed, 36 insertions, 38 deletions
@@ -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 - |