Check-in by ben on 2025-06-19 03:33:26

 Set global variabled blocked=1 in cgi.awk function cgi_init()
 when client IP address is in block.txt.  Change how blocked
 clients are treated.  OLD: Send empty document NEW: Send item
 URL to redirect back to archive.org  My intention is to block
 gopher to web proxies without leaving end users stuck on an
 empty document.  Instead, bots and users on blocked IP addresses
 will be redirected to item web pages.

 INSERTED    DELETED
        6          0 src/account/index.dcgi.m4
        3          1 src/cgi.awk
        6          0 src/details/index.dcgi.m4
        7          0 src/download/index.dcgi.m4
        6          0 src/list/index.dcgi.m4
        6          0 src/lists/index.dcgi.m4
        6          0 src/listsort/index.dcgi.m4
        6          0 src/raw/index.cgi.m4
        6          0 src/search/index.dcgi.m4
        6          0 src/sort/index.dcgi.m4
        6          0 src/wizard/step1/index.dcgi.m4
        6          0 src/wizard/step2/index.dcgi.m4
        6          0 src/wizard/step3/index.dcgi.m4
       76          1 TOTAL over 13 changed files

Index: src/account/index.dcgi.m4
==================================================================
--- src/account/index.dcgi.m4
+++ src/account/index.dcgi.m4
@@ -17,10 +17,16 @@
    item_server, item_size, output, signature, str, thumb, title,
    type, url)
{
    acct = parts[3]
    email = search
+
+    if (blocked) {
+        printf "[h|Account|URL:%s/details/%s|%s|%s]\n",
+            api_ssl_endpoint, acct, server, port
+        exit 0
+    }

    signature = sprintf("account/%s/%s", acct, email)
    str = cache_init(signature)
    if (length(str) > 0) {
        print str

Index: src/cgi.awk
==================================================================
--- src/cgi.awk
+++ src/cgi.awk
@@ -1,11 +1,13 @@
function cgi_init(    ip) {
+    blocked = 0
    ip = ENVIRON["REMOTE_ADDR"]
    while ((getline < blocklist) > 0) {
        # bad bot ignoring robots.txt, block by IP address
        if (match(ip, $0)) {
-            exit 0
+            blocked = 1
+            break
        }
    }
    close(blocklist)

    search = ARGV[1]

Index: src/details/index.dcgi.m4
==================================================================
--- src/details/index.dcgi.m4
+++ src/details/index.dcgi.m4
@@ -17,10 +17,16 @@
    iaout, id, item_id, item_server, item_size, label, language,
    license, output, pub_date, scanner, signature, str, thumb, title,
    topic, topics, type, uploader_account, uploader_email, url)
{
    item_id = parts[3]
+
+    if (blocked) {
+        printf "[h|Details|URL:%s/details/%s|%s|%s]\n",
+            api_ssl_endpoint, item_id, server, port
+        exit 0
+    }

    signature = "details/" item_id
    str = cache_init(signature)
    if (length(str) > 0) {
        print str

Index: src/download/index.dcgi.m4
==================================================================
--- src/download/index.dcgi.m4
+++ src/download/index.dcgi.m4
@@ -13,10 +13,17 @@
function main(cmd, dir, files, file_size, format, iaout, is_archive,
    is_proxy, item_server, label, mtime, name, source, url)
{
    dir = parts[2]
    item_id = parts[3]
+
+    if (blocked) {
+        printf "[h|Download|URL:%s/download/%s|%s|%s]\n",
+            api_ssl_endpoint, item_id, server, port
+        exit 0
+    }
+
    if (dir == "download") {
        is_proxy = 1
    } else {
        # dir == "direct"
        is_proxy = 0

Index: src/list/index.dcgi.m4
==================================================================
--- src/list/index.dcgi.m4
+++ src/list/index.dcgi.m4
@@ -42,10 +42,16 @@
    }

    split(search, parts, "/")
    acct = parts[1]
    list_id = parts[2]
+
+    if (blocked) {
+        printf "[h|List|URL:%s/details/%s/lists/%d|%s|%s]\n",
+            api_ssl_endpoint, acct, list_id, server, port
+        exit 0
+    }

    signature = sprintf("list/%s", input)
    str = cache_init(signature)
    if (length(str) > 0) {
        print str

Index: src/lists/index.dcgi.m4
==================================================================
--- src/lists/index.dcgi.m4
+++ src/lists/index.dcgi.m4
@@ -14,10 +14,16 @@

function main(     cmd, count, fields, iaout, i, id, is_private, item,
    item_count, item_id, label, name, output, record, records,
    signature, str, url)
{
+    if (blocked) {
+        printf "[h|Lists|URL:%s/details/%s/lists|%s|%s]\n",
+            api_ssl_endpoint, search, server, port
+        exit 0
+    }
+
    signature = sprintf("%s/lists", search)
    str = cache_init(signature)
    if (length(str) > 0) {
        print str
        return

Index: src/listsort/index.dcgi.m4
==================================================================
--- src/listsort/index.dcgi.m4
+++ src/listsort/index.dcgi.m4
@@ -7,10 +7,16 @@

include(src/config.awk)
incl(src/cgi.awk)

function main(     acct, i, lbl, list_id, opt) {
+    if (blocked) {
+        printf "[h|Internet Archive|URL:%s/|%s|%s]\n",
+            api_ssl_endpoint, server, port
+        exit 0
+    }
+
    lbl[1] = "Relevance"
    opt[1] = ""
    lbl[2] = "Weekly views [^]"
    opt[2] = "week asc"
    lbl[3] = "Weekly views [v]"

Index: src/raw/index.cgi.m4
==================================================================
--- src/raw/index.cgi.m4
+++ src/raw/index.cgi.m4
@@ -22,10 +22,16 @@
incl(src/cgi.awk)
incl(src/util.awk)
incl(src/web.awk)

function main() {
+    if (blocked) {
+        printf "[h|Internet Archive|URL:%s/|%s|%s]\n",
+            api_ssl_endpoint, server, port
+        exit 0
+    }
+
    if (path == "/debug/") {
        dump(search, TYPE_HEADERS)
    } else if (path == "/raw/") {
        dump(search, TYPE_RAW)
    } else if (path == "/text/") {

Index: src/search/index.dcgi.m4
==================================================================
--- src/search/index.dcgi.m4
+++ src/search/index.dcgi.m4
@@ -13,10 +13,16 @@
function main(search,     cmd, count, creator, descr, field, fields, i,
    iaout, id, item, items, jsout, label, numfound, order,
    order_names, page, rows, searchstr, sort_param, str, title, type,
    url)
{
+    if (blocked) {
+        printf "[h|Search|URL:%s/|%s|%s]\n", api_ssl_endpoint,
+            server, port
+        exit 0
+    }
+
    order_names["addeddate"] = "addeddate"
    order_names["collection_size"] = "collection_size"
    order_names["createddate"] = "createddate"
    order_names["creator"] = "creatorSorter"
    order_names["date"] = "date"

Index: src/sort/index.dcgi.m4
==================================================================
--- src/sort/index.dcgi.m4
+++ src/sort/index.dcgi.m4
@@ -7,10 +7,16 @@

include(src/config.awk)
incl(src/cgi.awk)

function main(     i, lbl, opt) {
+    if (blocked) {
+        printf "[h|Internet Archive|URL:%s/|%s|%s]\n",
+            api_ssl_endpoint, server, port
+        exit 0
+    }
+
    lbl[1]  = "Default [^]"
    opt[1]  = "nav_order asc"
    lbl[2]  = "Default [v]"
    opt[2]  = "nav_order desc"
    lbl[3]  = "Weekly views [^]"

Index: src/wizard/step1/index.dcgi.m4
==================================================================
--- src/wizard/step1/index.dcgi.m4
+++ src/wizard/step1/index.dcgi.m4
@@ -7,10 +7,16 @@

include(src/config.awk)
incl(src/cgi.awk)

function main(     i, lbl, opt, searchstr) {
+    if (blocked) {
+        printf "[h|Internet Archive|URL:%s/|%s|%s]\n",
+            api_ssl_endpoint, server, port
+        exit 0
+    }
+
    searchstr = parts[4]

    lbl[1]  = "Any field contains"
    opt[1]  = "anyfield"
    lbl[2]  = "Any field does not contain"

Index: src/wizard/step2/index.dcgi.m4
==================================================================
--- src/wizard/step2/index.dcgi.m4
+++ src/wizard/step2/index.dcgi.m4
@@ -7,10 +7,16 @@

include(src/config.awk)
incl(src/cgi.awk)

function main(     field, newsearch, searchstr) {
+    if (blocked) {
+        printf "[h|Internet Archive|URL:%s/|%s|%s]\n",
+            api_ssl_endpoint, server, port
+        exit 0
+    }
+
    field = parts[4]
    searchstr = parts[5]

    if (field == "mediatype") {
        print "# Mediatype is:"

Index: src/wizard/step3/index.dcgi.m4
==================================================================
--- src/wizard/step3/index.dcgi.m4
+++ src/wizard/step3/index.dcgi.m4
@@ -7,10 +7,16 @@

include(src/config.awk)
incl(src/cgi.awk)

function main(     field, label, newsearch, op, searchstr, value) {
+    if (blocked) {
+        printf "[h|Internet Archive|URL:%s/|%s|%s]\n",
+            api_ssl_endpoint, server, port
+        exit 0
+    }
+
    field = parts[4]
    searchstr = parts[5]
    value = search

    if (field ~ /^-/) {