iAdd lawn-hark.sh script from pazz0. - gopher-lawn - The gopher lawn gopher directory project. Err bitreich.org 70
hgit clone git://bitreich.org/gopher-lawn/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/gopher-lawn/ URL:git://bitreich.org/gopher-lawn/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/gopher-lawn/ bitreich.org 70
1Log /scm/gopher-lawn/log.gph bitreich.org 70
1Files /scm/gopher-lawn/files.gph bitreich.org 70
1Refs /scm/gopher-lawn/refs.gph bitreich.org 70
1Tags /scm/gopher-lawn/tag bitreich.org 70
i--- Err bitreich.org 70
1commit ee7a798530add04897221c9b89c3212a41836375 /scm/gopher-lawn/commit/ee7a798530add04897221c9b89c3212a41836375.gph bitreich.org 70
1parent 3c4d6c01eaac78599e65e5cc246ba8ed7f554765 /scm/gopher-lawn/commit/3c4d6c01eaac78599e65e5cc246ba8ed7f554765.gph bitreich.org 70
hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70
iDate: Wed, 30 Aug 2023 21:03:27 +0200 Err bitreich.org 70
i Err bitreich.org 70
iAdd lawn-hark.sh script from pazz0. Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i A lawn-hark/lawn-hark.sh | 234 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 234 insertions(+), 0 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/lawn-hark/lawn-hark.sh b/lawn-hark/lawn-hark.sh /scm/gopher-lawn/file/lawn-hark/lawn-hark.sh.gph bitreich.org 70
i@@ -0,0 +1,234 @@ Err bitreich.org 70
i+#!/bin/bash Err bitreich.org 70
i+# Err bitreich.org 70
i+# Originally written by pazz0. Err bitreich.org 70
i+# Err bitreich.org 70
i+ Err bitreich.org 70
i+errorthreshold=3 Err bitreich.org 70
i+timeout=15 Err bitreich.org 70
i+onionsocksproxy="127.0.0.1:9050" Err bitreich.org 70
i+ Err bitreich.org 70
i+function tcpdial() { Err bitreich.org 70
i+ if [ -z "${1##*.onion}" ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ nc -w "${timeout}" -X 5 -x "${onionsocksproxy}" "$1" "$2" \ Err bitreich.org 70
i+ 2>/dev/null Err bitreich.org 70
i+ else Err bitreich.org 70
i+ nc -w "${timeout}" "$1" "$2" 2>/dev/null Err bitreich.org 70
i+ fi Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+function checkgopher() { Err bitreich.org 70
i+ if [ "$#" -gt 3 ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ data="$(printf "%s\t%s\r\n" "$3" "$4" \ Err bitreich.org 70
i+ | tcpdial "$1" "$2" \ Err bitreich.org 70
i+ | dd bs=128 count=1 2>/dev/null)" Err bitreich.org 70
i+ else Err bitreich.org 70
i+ data="$(printf "%s\r\n" "$3" \ Err bitreich.org 70
i+ | tcpdial "$1" "$2" \ Err bitreich.org 70
i+ | dd bs=128 count=1 2>/dev/null)" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ -z "${data}" ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ printf "Can't connect, timeout or no content\n" Err bitreich.org 70
i+ return 1 Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ -z "${data##3?* *}" ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ printf "Got type '3' on first line\n" Err bitreich.org 70
i+ return 1 Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ -z "${data##Error: File or directory not found!*}" ] \ Err bitreich.org 70
i+ || [ -z "${data##Error: Access denied!*}" ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ printf "Got Gophernicus error\n" Err bitreich.org 70
i+ return 1 Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ return 0 Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+function checkhttp() { Err bitreich.org 70
i+ # max. one redirect (2) for http->https things Err bitreich.org 70
i+ bc="$(curl -L --max-redirs 2 -m "${timeout}" -f "$1" 2>/dev/null \ Err bitreich.org 70
i+ | dd bs=16 count=1 2>/dev/null \ Err bitreich.org 70
i+ | wc -c \ Err bitreich.org 70
i+ | xargs)" Err bitreich.org 70
i+ if [ "${bc}" -eq 0 ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ printf "Can't connect, timout, too many redirects or no content\n" Err bitreich.org 70
i+ return 1 Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ return 0 Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+function checkcso() { Err bitreich.org 70
i+ bc="$(printf "status\r\n" \ Err bitreich.org 70
i+ | tcpdial "$1" "$2" \ Err bitreich.org 70
i+ | dd bs=16 count=1 2>/dev/null \ Err bitreich.org 70
i+ | wc -c \ Err bitreich.org 70
i+ | xargs)" Err bitreich.org 70
i+ if [ "${bc}" -eq 0 ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ printf "Can't connect, timeout or no content\n" Err bitreich.org 70
i+ return 1 Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ return 0 Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+function checkraw() { Err bitreich.org 70
i+ bc="$(tcpdial "$1" "$2" \ Err bitreich.org 70
i+ | dd bs=16 count=1 2>/dev/null \ Err bitreich.org 70
i+ | wc -c \ Err bitreich.org 70
i+ | xargs)" Err bitreich.org 70
i+ if [ "${bc}" -eq 0 ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ printf "Can't connect, timeout or no content\n" Err bitreich.org 70
i+ return 1 Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ return 0 Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+checktime="$(date +%s)" Err bitreich.org 70
i+statedir="$1" Err bitreich.org 70
i+ Err bitreich.org 70
i+if [ -z "${statedir}" ]; Err bitreich.org 70
i+then Err bitreich.org 70
i+ printf "You need to specify a state dir.\n" >&2 Err bitreich.org 70
i+ exit 1 Err bitreich.org 70
i+fi Err bitreich.org 70
i+ Err bitreich.org 70
i+mkdir -p "${statedir}" Err bitreich.org 70
i+if [ ! -d "${statedir}" ]; Err bitreich.org 70
i+then Err bitreich.org 70
i+ printf "%s is not a directory! Aborting.\n" "${statedir}" >&2 Err bitreich.org 70
i+ exit 1 Err bitreich.org 70
i+fi Err bitreich.org 70
i+ Err bitreich.org 70
i+shift Err bitreich.org 70
i+ Err bitreich.org 70
i+for f; Err bitreich.org 70
i+do Err bitreich.org 70
i+ type="" Err bitreich.org 70
i+ selector="" Err bitreich.org 70
i+ host="" Err bitreich.org 70
i+ port="" Err bitreich.org 70
i+ Err bitreich.org 70
i+ while read -r line; Err bitreich.org 70
i+ do Err bitreich.org 70
i+ value="$(printf '%s\n' "${line}" \ Err bitreich.org 70
i+ | cut -f 2- -d ':' \ Err bitreich.org 70
i+ | sed -n 's/^[[:space:]]*\(.*\)$/\1/p')" Err bitreich.org 70
i+ case "${line}" in Err bitreich.org 70
i+ Type:* ) Err bitreich.org 70
i+ type="${value}" Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ Selector:* ) Err bitreich.org 70
i+ selector="${value}" Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ Host:* ) Err bitreich.org 70
i+ host="${value}" Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ Port:* ) Err bitreich.org 70
i+ port="${value}" Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ esac Err bitreich.org 70
i+ done < "$f" Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ -z "${type}" ] \ Err bitreich.org 70
i+ || [ -z "${host}" ] \ Err bitreich.org 70
i+ || [ -z "${port}" ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ printf "ERROR\t%s\tInvalid entry!\n" "${f}" >&2 Err bitreich.org 70
i+ continue Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ #printf "DEBUG\t%s\tchecking\t%s\t%s\t%s\t%s\n" "${f}" "${type}" "${selector}" "${host}" "${port}" Err bitreich.org 70
i+ Err bitreich.org 70
i+ case "${type}" in Err bitreich.org 70
i+ cso ) Err bitreich.org 70
i+ error="$(checkcso "${host}" "${port}")" Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ telnet ) Err bitreich.org 70
i+ error="$(checkraw "${host}" "${port}")" Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ error ) Err bitreich.org 70
i+ error="Type = 'error'" Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ link ) Err bitreich.org 70
i+ if [ -n "${selector}" ] && [ -z "${selector##URL:*}" ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ url="${selector##URL:}" Err bitreich.org 70
i+ case "${url}" in Err bitreich.org 70
i+ http://* | https://* ) Err bitreich.org 70
i+ error="$(checkhttp "${url}")" Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ ssh://* ) Err bitreich.org 70
i+ sshhost="${url##ssh://}" Err bitreich.org 70
i+ sshhost="${sshhost##*@}" Err bitreich.org 70
i+ sshhost="${sshhost%%/*}" Err bitreich.org 70
i+ sshport="22" Err bitreich.org 70
i+ if [ -z "${sshhost##*:*}" ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ sshport="${sshhost##*:}" Err bitreich.org 70
i+ sshhost="${sshhost%%:*}" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ error="$(checkraw "${sshhost}" "${sshport}")" Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ * ) Err bitreich.org 70
i+ printf "TODO\t%s\tCan't handle %s\n" "${f}" "${url}" Err bitreich.org 70
i+ continue Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ esac Err bitreich.org 70
i+ else Err bitreich.org 70
i+ error="$(checkgopher "${host}" "${port}" "${selector}")" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ search ) Err bitreich.org 70
i+ error="$(checkgopher "${host}" "${port}" "${selector}" "")" Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ text | uuencoded | * ) Err bitreich.org 70
i+ error="$(checkgopher "${host}" "${port}" "${selector}")" Err bitreich.org 70
i+ ;; Err bitreich.org 70
i+ esac Err bitreich.org 70
i+ Err bitreich.org 70
i+ lastcheck="" Err bitreich.org 70
i+ errorcount=0 Err bitreich.org 70
i+ statefile="${statedir}/$(basename "$f")" Err bitreich.org 70
i+ if [ -f "${statefile}" ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ IFS=" " read -r lastcheck errorcount < "${statefile}" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ -n "${error}" ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ errorcount=$((errorcount + 1)) Err bitreich.org 70
i+ else Err bitreich.org 70
i+ errorcount=0 Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ ${errorcount} -ge ${errorthreshold} ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ printf "ERROR\t%s\t%s\n" "${f}" "${error}" >&2 Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ printf "%s\t%s\n" "${checktime}" "${errorcount}" > "${statefile}" Err bitreich.org 70
i+done Err bitreich.org 70
i+ Err bitreich.org 70
i+# garbage collection Err bitreich.org 70
i+find "${statedir}" -type f | while read -r f; Err bitreich.org 70
i+do Err bitreich.org 70
i+ IFS=" " read -r lastcheck errorcount < "${f}" Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ ${lastcheck} -ne ${checktime} ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ rm -f "${f}" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+done Err bitreich.org 70
i+ Err bitreich.org 70
.
Response:
text/plain