SMOLNET PORTAL home about changes
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
Original URLgopher://bitreich.org/0/scm/gopher-lawn/commit/ee7a798530...
Content-Typetext/plain; charset=utf-8