it* gopherproxy-c customized Err codevoid.de 70 i Err codevoid.de 70 hgit clone git://git.codevoid.de/gopherproxy-c-sdk URL:git://git.codevoid.de/gopherproxy-c-sdk codevoid.de 70 1Log /git/gopherproxy-c-sdk/log.gph codevoid.de 70 1Files /git/gopherproxy-c-sdk/files.gph codevoid.de 70 1Refs /git/gopherproxy-c-sdk/refs.gph codevoid.de 70 1README /git/gopherproxy-c-sdk/file/README.gph codevoid.de 70 1LICENSE /git/gopherproxy-c-sdk/file/LICENSE.gph codevoid.de 70 i--- Err codevoid.de 70 1commit 861e6fd9d5d8c09ca68e120db43279d3e5d5a938 /git/gopherproxy-c-sdk/commit/861e6fd9d5d8c09ca68e120db43279d3e5d5a938.gph codevoid.de 70 1parent 31bf0e0fa53e34bf32a57257f6e306a67ea813a6 /git/gopherproxy-c-sdk/commit/31bf0e0fa53e34bf32a57257f6e306a67ea813a6.gph codevoid.de 70 hAuthor: Stefan Hagen URL:mailto:sh+git[at]codevoid[dot]de codevoid.de 70 iDate: Thu, 30 Aug 2018 00:06:12 +0200 Err codevoid.de 70 i Err codevoid.de 70 isdk's customizations Err codevoid.de 70 i Err codevoid.de 70 iDiffstat: Err codevoid.de 70 i M Makefile | 6 +++++- Err codevoid.de 70 i M README | 7 +++++-- Err codevoid.de 70 i A config.def.h | 6 ++++++ Err codevoid.de 70 i M gopherproxy.c | 51 +++++++++++++++++++++----------- Err codevoid.de 70 i Err codevoid.de 70 i4 files changed, 50 insertions(+), 20 deletions(-) Err codevoid.de 70 i--- Err codevoid.de 70 1diff --git a/Makefile b/Makefile /git/gopherproxy-c-sdk/file/Makefile.gph codevoid.de 70 it@@ -10,12 +10,16 @@ LDFLAGS += -static Err codevoid.de 70 i # Linux Err codevoid.de 70 i #CPPFLAGS += -D_DEFAULT_SOURCE Err codevoid.de 70 i Err codevoid.de 70 i-all: $(BIN) Err codevoid.de 70 i+all: clean config.h $(BIN) Err codevoid.de 70 i Err codevoid.de 70 i $(BIN): $(OBJ) Err codevoid.de 70 i $(CC) $(OBJ) $(LDFLAGS) -o $@ Err codevoid.de 70 i Err codevoid.de 70 i+config.h: Err codevoid.de 70 i+ $(CP) config.def.h config.h Err codevoid.de 70 i+ Err codevoid.de 70 i $(OBJ): Makefile Err codevoid.de 70 i Err codevoid.de 70 i clean: Err codevoid.de 70 i rm -f $(BIN) $(OBJ) Err codevoid.de 70 i+ Err codevoid.de 70 1diff --git a/README b/README /git/gopherproxy-c-sdk/file/README.gph codevoid.de 70 it@@ -58,9 +58,12 @@ Notes Err codevoid.de 70 i Tor support: Err codevoid.de 70 i Err codevoid.de 70 i To accept tor gopher browsing, remove the -static flag from LDFLAGS in the Err codevoid.de 70 i-Makefile and modify the isblacklisted() function in gopherproxy.c to allow Err codevoid.de 70 i-.onion addresses. Err codevoid.de 70 i+Makefile set allow_tor to 1 in config.h to allow .onion addresses. Err codevoid.de 70 i Err codevoid.de 70 i+Port restriction: Err codevoid.de 70 i+ Err codevoid.de 70 i+For security reasons, only port 70 and 7070 are accepted as valid gopher ports. Err codevoid.de 70 i+If you want allow all ports, set allow_all_ports in config.h Err codevoid.de 70 i Err codevoid.de 70 i Nginx buffering issues: Err codevoid.de 70 i Err codevoid.de 70 1diff --git a/config.def.h b/config.def.h /git/gopherproxy-c-sdk/file/config.def.h.gph codevoid.de 70 it@@ -0,0 +1,6 @@ Err codevoid.de 70 i+/* gopherproxy config file */ Err codevoid.de 70 i+ Err codevoid.de 70 i+static int allow_tor = 0; Err codevoid.de 70 i+static int allow_all_ports = 0; Err codevoid.de 70 i+static int disable_urlbar = 0; Err codevoid.de 70 i+static char hostname[] = ""; Err codevoid.de 70 1diff --git a/gopherproxy.c b/gopherproxy.c /git/gopherproxy-c-sdk/file/gopherproxy.c.gph codevoid.de 70 it@@ -1,3 +1,5 @@ Err codevoid.de 70 i+#define _WITH_DPRINTF Err codevoid.de 70 i+ Err codevoid.de 70 i #include Err codevoid.de 70 i #include Err codevoid.de 70 i #include Err codevoid.de 70 it@@ -10,9 +12,10 @@ Err codevoid.de 70 i #include Err codevoid.de 70 i #include Err codevoid.de 70 i #include Err codevoid.de 70 i+#include "config.h" Err codevoid.de 70 i Err codevoid.de 70 i-#define MAX_RESPONSETIMEOUT 10 /* timeout in seconds */ Err codevoid.de 70 i-#define MAX_RESPONSESIZ 4000000 /* max download size in bytes */ Err codevoid.de 70 i+#define MAX_RESPONSETIMEOUT 15 /* timeout in seconds */ Err codevoid.de 70 i+#define MAX_RESPONSESIZ 8589934592 /* max download size in bytes */ Err codevoid.de 70 i Err codevoid.de 70 i #ifndef USE_PLEDGE Err codevoid.de 70 i #define pledge(a,b) 0 Err codevoid.de 70 it@@ -32,7 +35,7 @@ struct visited { Err codevoid.de 70 i char port[8]; Err codevoid.de 70 i }; Err codevoid.de 70 i Err codevoid.de 70 i-int headerset = 0; Err codevoid.de 70 i+int headerset = 0, isdir = 0; Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i die(int code, const char *fmt, ...) Err codevoid.de 70 it@@ -62,6 +65,9 @@ die(int code, const char *fmt, ...) Err codevoid.de 70 i vfprintf(stdout, fmt, ap); Err codevoid.de 70 i va_end(ap); Err codevoid.de 70 i Err codevoid.de 70 i+ if (isdir) Err codevoid.de 70 i+ fputs("\n\n\n", stdout); Err codevoid.de 70 i+ Err codevoid.de 70 i exit(1); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 it@@ -134,9 +140,9 @@ isblacklisted(const char *host, const char *port, const char *path) Err codevoid.de 70 i { Err codevoid.de 70 i char *p; Err codevoid.de 70 i Err codevoid.de 70 i- if (strcmp(port, "70") && strcmp(port, "7070")) Err codevoid.de 70 i+ if (!allow_all_ports && (strcmp(port, "70") && strcmp(port, "7070"))) Err codevoid.de 70 i return 1; Err codevoid.de 70 i- if ((p = strstr(host, ".onion")) && strlen(p) == strlen(".onion")) Err codevoid.de 70 i+ if (!allow_tor && ((p = strstr(host, ".onion")) && strlen(p) == strlen(".onion"))) Err codevoid.de 70 i return 1; Err codevoid.de 70 i return 0; Err codevoid.de 70 i } Err codevoid.de 70 it@@ -152,7 +158,7 @@ typestr(int c) Err codevoid.de 70 i case '4': return " MAC"; Err codevoid.de 70 i case '5': return " DOS"; Err codevoid.de 70 i case '6': return " UUENC"; Err codevoid.de 70 i- case '7': return "SEARCH"; Err codevoid.de 70 i+ case '7': return " SEND"; Err codevoid.de 70 i case '8': return "TELNET"; Err codevoid.de 70 i case '9': return " BIN"; Err codevoid.de 70 i case 'g': return " GIF"; Err codevoid.de 70 it@@ -307,8 +313,13 @@ servedir(const char *server, const char *port, const char *path, const char *par Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i if (!strcmp(v.port, "70")) Err codevoid.de 70 i- snprintf(uri, sizeof(uri), "%s/%c%s", Err codevoid.de 70 i- v.server, v._type, v.path); Err codevoid.de 70 i+ if(!strcmp(v.server, hostname)) { Err codevoid.de 70 i+ snprintf(uri, sizeof(uri), "/%c%s", Err codevoid.de 70 i+ v._type, v.path); Err codevoid.de 70 i+ } else { Err codevoid.de 70 i+ snprintf(uri, sizeof(uri), "%s/%c%s", Err codevoid.de 70 i+ v.server, v._type, v.path); Err codevoid.de 70 i+ } Err codevoid.de 70 i else Err codevoid.de 70 i snprintf(uri, sizeof(uri), "%s:%s/%c%s", Err codevoid.de 70 i v.server, v.port, v._type, v.path); Err codevoid.de 70 it@@ -329,7 +340,7 @@ servedir(const char *server, const char *port, const char *path, const char *par Err codevoid.de 70 i xmlencode(v.username); Err codevoid.de 70 i fputs( Err codevoid.de 70 i "\" name=\"p\" value=\"\" size=\"72\" />" Err codevoid.de 70 i- "
", stdout);	Err	codevoid.de	70
i+                                "
", stdout);	Err	codevoid.de	70
i                         break;	Err	codevoid.de	70
i                 case '8': /* telnet */	Err	codevoid.de	70
i                 case 'T': /* tn3270 */	Err	codevoid.de	70
it@@ -353,6 +364,8 @@ servedir(const char *server, const char *port, const char *path, const char *par	Err	codevoid.de	70
i                                 xmlencode(v.path + sizeof("URL:") - 1);	Err	codevoid.de	70
i                         } else {	Err	codevoid.de	70
i                                 fputs("?q=", stdout);	Err	codevoid.de	70
i+                                if(strncmp(uri, "/", sizeof("/") -1))	Err	codevoid.de	70
i+                                        fputs("gopher://", stdout);	Err	codevoid.de	70
i                                 xmlencode(uri);	Err	codevoid.de	70
i                         }	Err	codevoid.de	70
i                         fputs("\">", stdout);	Err	codevoid.de	70
it@@ -498,7 +511,7 @@ main(void)	Err	codevoid.de	70
i 	Err	codevoid.de	70
i         if (!(qs = getenv("QUERY_STRING")))	Err	codevoid.de	70
i                 qs = "";	Err	codevoid.de	70
i-        if ((p = getparam(qs, "q"))) {	Err	codevoid.de	70
i+        if ((p = getparam(qs, "q")) || (p = getparam(qs,("%E2%98%BA")))) {	Err	codevoid.de	70
i                 if (decodeparam(query, sizeof(query), p) == -1 ||	Err	codevoid.de	70
i                     !checkparam(query))	Err	codevoid.de	70
i                         die(400, "Invalid parameter: q\n");	Err	codevoid.de	70
it@@ -519,7 +532,7 @@ main(void)	Err	codevoid.de	70
i                 if (!parseuri(uri, &u))	Err	codevoid.de	70
i                         die(400, "Invalid uri: %s\n", uri);	Err	codevoid.de	70
i                 if (u.host[0] == '\0')	Err	codevoid.de	70
i-                        die(400, "Invalid hostname\n");	Err	codevoid.de	70
i+                        strcpy(u.host, hostname);	Err	codevoid.de	70
i 	Err	codevoid.de	70
i                 if (u.path[0] == '\0')	Err	codevoid.de	70
i                         memcpy(u.path, "/", 2);	Err	codevoid.de	70
it@@ -581,7 +594,7 @@ main(void)	Err	codevoid.de	70
i                 }	Err	codevoid.de	70
i         }	Err	codevoid.de	70
i 	Err	codevoid.de	70
i-        headerset = 1;	Err	codevoid.de	70
i+        headerset = isdir = 1;	Err	codevoid.de	70
i         fputs(	Err	codevoid.de	70
i                 "Content-Type: text/html; charset=utf-8\r\n"	Err	codevoid.de	70
i                 "\r\n"	Err	codevoid.de	70
it@@ -601,14 +614,18 @@ main(void)	Err	codevoid.de	70
i                 "\n"	Err	codevoid.de	70
i                 "\n"	Err	codevoid.de	70
i                 "\n"	Err	codevoid.de	70
i-                "\n"	Err	codevoid.de	70
i-                "
"	Err	codevoid.de	70
i+                "\n", stdout);	Err	codevoid.de	70
i+	Err	codevoid.de	70
i+        if(!disable_urlbar) {	Err	codevoid.de	70
i+                fputs("
"	Err	codevoid.de	70
i                 "  URI: "	Err	codevoid.de	70
i                 "
" Err codevoid.de 70 i- "
\n", stdout);	Err	codevoid.de	70
i+                "\n", stdout);	Err	codevoid.de	70
i+        }	Err	codevoid.de	70
i+        fputs("
\n", stdout);	Err	codevoid.de	70
i 	Err	codevoid.de	70
i         if (query[0]) {	Err	codevoid.de	70
i                 if (_type != '7')	Err	codevoid.de	70
.